כסלו

איזהו גיבור – המוחק את קודו

יש המון מאמרים על כתיבת קוד. המאמר הזה הוא על מחיקת קוד .
המתודה הפשוטה ביותר למחיקת קוד היא זאת: לסמן חלק מהקוד בעורך, וללחוץ על מקש המחיקה. זהו.
זה נשמע מאד פשוט, אבל מסתבר שהרבה אנשים לא עושים את זה.
נראה שלנו, המתכנתים, קשה להיפטר מדברים. אנחנו אוהבים להשאיר קטעי קוד בסביבה למקרה שנצטרך את זה יום אחד. דיבגנו את זה, זה עובד – זה ממש בל תשחית לזרוק. לכן אנחנו רק מנטרלים את הקוד – שמים אותו בהערה, שמים אותו בתוך תנאי, או פשוט לא קוראים לו יותר.
למתכנתים כמונו אפשר לומר: “יש Source control!”. כלומר: אין צורך לדאוג שמשהו יעלם לנצח. ל-Team Server תמיד יהיה הקוד הישן אם נצטרך אותו.
חוץ מזה, לעניות דעתי ההסתברות לחזרה לקוד ישן היא מאד נמוכה: בד”כ קל יותר לכתוב קוד חדש מאשר להבין קוד ישן. זה נכון בין אם הקוד שנמחק הוא שתי שורות פשוטות ובין אם זה אלגוריתם מורכב: אם אלה שתי שורות, מה הבעיה לכתוב אותן שוב? ואם זה אלגוריתם מורכב, אני אעדיף לשבת ולנסח אותו מחדש מאשר לנסות להבין את כל ה-if-ים וה-else-ים המקוננים שכתבתי לפני חצי שנה…
אבל מה רע בלהשאיר קוד בלתי קרוא? אז זהו, שיש שתי רעות. האחת – זה מקשה על הקריאה: מאד קל להכניס קוד להערה. אבל אם הקוד הוכנס להערה, אז פתאום יש לך קטע קוד ירוק באמצע המתודה שלך, ואתה צריך לדלג עליו, ואז המתודה כבר לא נכנסת בתוך המסך וצריך לגלול, וכבר הקשית מאד על הקריאה וההבנה של המתודה.
הרעה השניה היא – בלבול. להכניס את הקוד להערה זה רע מאד, כי תפקידן של הערות הוא לספק אינפורמציה נצרכת להבנת הקוד. קוד בהערה עושה בדיוק ההפך – לא רק שהוא לא מסביר, הוא מבלבל.
ונניח שהכנסנו את הקוד לתוך תנאי שלעולם לא מתקיים, או סתם בתור מתודה שאף אחד לא קורא לה. אז יש לנו קטע קוד שנמצא אבל לא נקרא, וזה יוצר תחושת חוסר בטחון אצל מי שקורא או מתחזק את הקוד אחרינו – האם נכנסים למתודה הזו? האם קטע הקוד הזה נקרא? למה הקוד כבר לא נקרא? האם הוא ייקרא אי פעם בעתיד? לכן עדיף למחוק את הקטע הזה לגמרי ולשמר אותו ב-Source control. אבל אם מאיזושהי סיבה לא ברורה מחליטים להשאיר קטע קוד בלתי קרוי – יש לתעד בפרוטרוט מדוע הוא נכתב ומדוע הוא בוטל ומדוע הוא לא נמחק.
קוד שנמצא בתוך התניות שלא מתקיימות (למשל if (false)) זה עוד יותר גרוע מקוד בהערה כי ה-IDE לא צובע את זה בירוק, ואם לא שמים לב, מי שקורא את הקוד עלול לחשוב שהקוד הזה מתקיים.
פשרה שניתן לבצע היא השארת “ציוני דרך”:
// (There used to be another algorithm here that used hashing, that
// was faster, but had race conditions. If you want it, it's in
// revision 1.16 or earlier of ThingMap.java in CVS.)
זה קטן, זה לא מתפרץ, אבל זה נותן מעט היסטוריה והפניה למקום עם יותר אינפורמציה.
מתי עוד קורה לנו שאנחנו משאירים קוד בלתי משומש? לפעמים כשאנחנו כותבים קוד אנחנו רוצים לנסות דרך מסויימת אך לא בטוחים שהיא תעבוד. אז מנסים, ואח”כ מכניסים באופן זמני את השורה להערה, ובינתיים משתנים להם עוד קבצים, וכשמגיע הזמן להעלות את הקבצים ל-Source Control כבר שכחנו איפה כל ההערות הזמניות נמצאות. לכן כדאי להשאיר סימן ברור ליד כל הערה זמנית כזו, שניתן יהיה להשתמש בחיפוש גלובלי כדי מצוא אותו ולמחוק.
זה אולי נראה דרסטי למחוק קוד שיגענו ביצירתו. אבל אל דאגה – יהיה בסדר. היתה סיבה שבגללה רצינו לנטרל את הקוד הזה. ול-source Control יש עותק של הקוד הזה אם אי פעם נרצה לחזור אליו. בואו נסתכל על זה ככה: מה הסיכויים שנרצה לחזור לזה לעומת הסיכויים שנצטרך להסתכל על הקוד המיותר הזה למשך שאר חיי הפרוייקט?
יאללה. בואו נמחק את הקוד הזה. לא נתגעגע אליו.

תגובה 1 על “איזהו גיבור – המוחק את קודו

כתבו תגובה

כתובת הדוא"ל שלכם לא תוצג.