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 יכולים גם לעזור למתכנתים לזהות נקודות בקוד שיכולות להרוויח מריפקטורינג.
ראה גם
לחקור עוד על ריפקטורינג ברובי, בדוק את המשאבים האלה:
- הספר המכונן של מרטין פאולר: Refactoring: Improving the Design of Existing Code
- המדריך לסגנון של רובי לכתיבת קוד נקי יותר: The Ruby Style Guide
- RuboCop, ניתוח קוד סטטי (linter) ומעצב: RuboCop GitHub Repository