Kotlin:
Rifattorizzazione

Come fare:

Ecco un frammento di codice Kotlin che mostra un comune “bad smell” del codice e la sua versione rifattorizzata. Partiamo da un pezzo di codice che fa troppo:

fun processOrders(orders: List<Order>) {
    for (order in orders) {
        print("ID dell'ordine: ${order.id}")
        // Calcolo del totale dell'ordine
        var total = 0.0
        for (item in order.items) {
            total += item.price
        }
        // Applica sconto
        if (order.customer.isVIP) {
            total *= 0.9
        }
        print("Totale: $total")
        // Altre elaborazioni...
    }
}

Rifattorizzato per una migliore leggibilità e separazione delle responsabilità:

fun printOrderSummary(order: Order) {
    print("ID dell'ordine: ${order.id}")
    val total = calculateTotal(order)
    print("Totale: $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) }
}

Nessun output di esempio qui dato che non abbiamo cambiato la funzionalità, ma la leggibilità e la manutenibilità del codice hanno ricevuto un enorme impulso!

Approfondimento

Il concetto di refactoring esiste da quando ha inizio la programmazione, ma ha realmente preso piede come disciplina negli anni ‘90, specialmente dopo che Martin Fowler ha pubblicato “Refactoring: Migliorare il disegno del codice esistente” nel 1999. Questo libro ha dato un nome alla pratica e ha definito un metodo organizzato per applicarla, inclusa una raccolta di tecniche di refactoring.

Confrontando il refactoring con le alternative: si potrebbe riscrivere il codice da zero (rischioso e dispendioso in termini di tempo), o semplicemente fare modifiche additive (porta a un aumento eccessivo del software e potenziale debito tecnico). Il refactoring colpisce il punto giusto: modernizza e pulisce mantenendo il rischio basso.

Per quanto riguarda l’implementazione, è essenziale avere un robusto insieme di test prima di iniziare il refactoring per assicurarsi di non cambiare accidentalmente il comportamento del programma. Molti IDE moderni (incluso IntelliJ per Kotlin) hanno strumenti di refactoring automatizzati per rinominare variabili, estrarre metodi e altro, che possono accelerare il processo e ridurre gli errori.

Vedi anche