Kotlin:
שיפור קוד

איך לעשות:

הנה קטע קוד בקוטלין המראה ריח קוד נפוץ ואת גרסת ההפקטורינג שלו. אנחנו מתחילים עם חתיכת קוד שעושה יותר מדי:

fun processOrders(orders: List<Order>) {
    for (order in orders) {
        print("Order ID: ${order.id}")
        // חישוב סכום הזמנה
        var total = 0.0
        for (item in order.items) {
            total += item.price
        }
        // החלת הנחה
        if (order.customer.isVIP) {
            total *= 0.9
        }
        print("Total: $total")
        // עיבוד נוסף...
    }
}

הפקטורינג לקריאות והפרדת דאגות טובה יותר:

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) }
}

כאן אין פלט לדוגמה מכיוון שלא שינינו את הפונקציונליות, אך קריאות הקוד וניתנותו לתחזוקה קיבלו תמריץ עצום!

צלילה עמוקה

הפקטורינג כמושג קיים כל עוד תכנות התקיים, אך זכה לתעופה כמשמעות בשנות ה-90, במיוחד לאחר שמרטין פאולר פרסם את “Refactoring: Improving the Design of Existing Code” ב-1999. הספר הזה נתן שם לתרגול והגדיר שיטה מאורגנת להחלתו, כולל קטלוג של טכניקות הפקטורינג.

השוואה בין הפקטורינג לאלטרנטיבות: אפשר לכתוב מחדש קוד מאפס (מסוכן ולוקח זמן), או לבצע שינויים תוספתיים (מוביל לנפיחות תוכנה וחוב טכנולוגי פוטנציאלי). הפקטורינג מצליח להכות בנקודה המתוקה - הוא מעדכן ונקה תוך שמירה על סיכון נמוך.

מבחינת יישום, חשוב להחזיק בסט חזק של טסטים לפני שמתחילים בהפקטורינג כדי להבטיח שלא משנים בטעות את התנהגות התוכנית. רבים מסביבות הפיתוח המודרניות (כולל IntelliJ עבור קוטלין) מציעות כלים אוטומטיים להפקטורינג כמו שינוי שמות משתנים, חילוץ שיטות, ועוד, אשר יכולים להאיץ את התהליך ולצמצם שגיאות.

ראה גם