Kotlin:
Refatoração

Como Fazer:

Aqui está um trecho em Kotlin mostrando um problema comum no código e sua versão refatorada. Começamos com um trecho de código que está fazendo demais:

fun processOrders(orders: List<Order>) {
    for (order in orders) {
        print("ID do Pedido: ${order.id}")
        // Calculando o total do pedido
        var total = 0.0
        for (item in order.items) {
            total += item.price
        }
        // Aplicar desconto
        if (order.customer.isVIP) {
            total *= 0.9
        }
        print("Total: $total")
        // Mais processamento...
    }
}

Refatorado para melhor legibilidade e separação de preocupações:

fun printOrderSummary(order: Order) {
    print("ID do Pedido: ${order.id}")
    val total = calculateTotal(order)
    print("Total: $total")
}

fun calculateTotal(order: Order): Double {
    var total = order.items.sumOf { it.price }
    return if (order.customer.isVIP) total * 0.9 else total
}

fun processOrders(orders: List<Order>) {
    orders.forEach { printOrderSummary(it) }
}

Não temos saída de exemplo aqui, pois não mudamos a funcionalidade, mas a legibilidade e a manutenção do código receberam um grande impulso!

Aprofundando

Refatoração como conceito existe desde o início da programação, mas realmente ganhou força como disciplina nos anos 1990, especialmente após Martin Fowler publicar “Refactoring: Improving the Design of Existing Code” em 1999. Esse livro deu nome à prática e definiu um método organizado para aplicá-la, incluindo um catálogo de técnicas de refatoração.

Comparando a refatoração com alternativas: você poderia reescrever o código do zero (arriscado e demorado), ou simplesmente fazer mudanças aditivas (leva ao inchaço do software e à possível dívida técnica). Refatoração acerta em cheio - moderniza e limpa mantendo o risco baixo.

Em termos de implementação, é essencial ter um conjunto robusto de testes antes de começar a refatorar para garantir que não altere acidentalmente o comportamento do programa. Muitas IDEs modernas (incluindo IntelliJ para Kotlin) têm ferramentas de refatoração automatizadas para renomear variáveis, extrair métodos e mais, o que pode acelerar o processo e reduzir erros.

Veja Também