Ruby:
רפקטורינג

איך לבצע:

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

לפני ריפקטורינג:

def sum_of_squares(numbers)
  sum = 0
  numbers.each do |number|
    square = number * number
    sum += square
  end
  sum
end

puts sum_of_squares([1, 2, 3])  # פלט: 14

אחרי ריפקטורינג:

def sum_of_squares(numbers)
  numbers.map { |number| number**2 }.sum
end

puts sum_of_squares([1, 2, 3])  # פלט: 14

הגרסה המרופקטרת משתמשת בEnumerable של רובי כדי לבטא את אותה הלוגיקה בצורה תמציתית וברורה יותר. המתודה map משנה כל אלמנט, ו-sum מצטבר את ערכיהם, מה שמסיר את הצורך בניהול לולאה ידנית והשמת משתנים.

צלילה עמוקה

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

כאשר אנו מדברים על אלטרנטיבות לריפקטורינג, עלינו לשקול גישה שונה כמו ‘שכתוב’, שם תחליף את המערכת הישנה בחלקים או במלואה, או להתאמן בתרגולים כמו ‘בדיקות קוד’ ו’תכנות זוגי’ כדי לשפר בהדרגה את איכות הקוד. עם זאת, אלו אינם תחליפים לריפקטורינג; הם משלימים את התהליך.

מבחינת יישום, רובי מספקת תחביר מצוין וביטויי שלעיתים קרובות גורם לקוד להיות קצר וקריא יותר לאחר ריפקטורינג. העקרונות המרכזיים כוללים DRY (Don’t Repeat Yourself - אל תחזור על עצמך), שימוש בשמות משמעותיים, השמת דגש על מתודות קצרות המתמקדות במשימה יחידה, והשימוש במודול ה-Enumerable של רובי באופן יעיל, כפי שנראה בדוגמה למעלה. כלים אוטומטיים כמו RuboCop יכולים גם לעזור למתכנתים לזהות נקודות בקוד שיכולות להרוויח מריפקטורינג.

ראה גם

לחקור עוד על ריפקטורינג ברובי, בדוק את המשאבים האלה: