Kotlin:
Refaktoryzacja

Jak to zrobić:

Oto fragment kodu w Kotlinie pokazujący powszechny “smród” kodu oraz jego zrefaktoryzowaną wersję. Zaczynamy od kawałka kodu, który robi za dużo:

fun processOrders(orders: List<Order>) {
    for (order in orders) {
        print("Order ID: ${order.id}")
        // Obliczanie sumy zamówienia
        var total = 0.0
        for (item in order.items) {
            total += item.price
        }
        // Zastosowanie rabatu
        if (order.customer.isVIP) {
            total *= 0.9
        }
        print("Total: $total")
        // Więcej przetwarzania...
    }
}

Zrefaktoryzowany dla lepszej czytelności i oddzielenia odpowiedzialności:

fun printOrderSummary(order: Order) {
    print("Order ID: ${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) }
}

Nie ma tutaj przykładowego wyniku, ponieważ nie zmieniliśmy funkcjonalności, ale czytelność i łatwość utrzymania kodu znacząco wzrosły!

Dogłębna analiza

Refaktoryzacja jako koncepcja istnieje od początków programowania, ale naprawdę zyskała na znaczeniu jako dyscyplina w latach 90., szczególnie po publikacji przez Martina Fowlera “Refaktoryzacja: Udoskonalanie struktury istniejącego kodu” w 1999 roku. Ta książka dała nazwę praktyce i zdefiniowała zorganizowaną metodę jej stosowania, w tym katalog technik refaktoryzacji.

Porównując refaktoryzację do alternatyw: można napisać kod od nowa (ryzykowne i czasochłonne) lub po prostu dokonywać dodatkowych zmian (prowadzi do nadmiaru oprogramowania i potencjalnego długu technicznego). Refaktoryzacja trafia w słodki punkt - modernizuje i porządkuje, jednocześnie utrzymując ryzyko na niskim poziomie.

Jeśli chodzi o implementację, kluczowe jest posiadanie solidnego zestawu testów przed rozpoczęciem refaktoryzacji, aby upewnić się, że nie zmienisz przypadkowo zachowania programu. Wiele nowoczesnych środowisk IDE (w tym IntelliJ dla Kotlina) posiada zautomatyzowane narzędzia do refaktoryzacji, takie jak zmiana nazw zmiennych, ekstrakcja metod i inne, które mogą przyspieszyć proces i zredukować błędy.

Zobacz również