Monday, July 15, 2013

ואלו שמות - And those are the names...

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

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

var xmlResposeBuilder = new XMLResponseBuilder();
var xmlRequest = xmlRequestBuilder.Build(someObj);

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

דוגמאות טובות לשמות קלאסים הן:
ResponseParser, IdGenerator, StringInputValidator, NewsFinder
דוגמאות טובות לשמות מתודות הן:
GetName, SetName, IsDefault, Parse, Build, Delete, Add

ושהם קשורות לקלאס שלהם, הכוונה של מה המתודות עושה – מתבהרת.


אז עבדנו לפי הכללים והחלטנו להתחכם,
בעברי הרחוק, כתבתי פונקציה לסביבת unix שהורגת את כל התהליכים ללא אב, תהליכים אלו נקראים לעיתים "זומבים", "יתומים" או "רוחות רפאים" (Zombie/Orphan/Ghost) ומתכנתים בסביבה הזאת יודעים על מה מדובר כאשר השמות הללו עולים לאוויר.
הבעיה שקצת התחכמתי, היה לי קצת משעמם באותו יום ושמעתי אלבום של מטאליקה, תוך כדי עבודה כמובן. קראתי לפונקציה הזאת KillEmAll, ממש נחתה עלי השראה.
אחרי לא מעט זמן, מתכנת אחר היה צריך לתחזק משהו באיזור.
מקריאה ראשונית לא ממש הבין מה הפונקציה הזאת עושה והיה צריך להיכנס אליה.
זה לא מצב תקין, למרות שבזמנו חשבתי שזה מצחיק ונחמד ויכניס טיפה עניין לקוד.
שם טוב לפונקציה היה KillAllOrphanProcesses או KillAllZombieProcesses והוא לא היה צריך לקרוא לי או להיכנס לקוד.... או לקלל אותי בשלב מסוים, הוא לא צחק.


באופן עקרוני, שמות ארוכים מדי לא מומלצים כי הם נוטים לבלבל וליצור חוסר בהירות, ועדיף שמות קצרים ככל האפשר שמתארים את טווח הפעולה של האובייקט או הפונקציה.
לדוגמא, קרה לי מקרה לא מזמן באחד הפרויקטים שהיו כמה אובייקטים משותפים שהקידומת שלהם הייתה בסגנון של BankAccountData ולאחר מכן כל מיני שמות פעולה, כמו Parser, Builder או Mapper. הבעיה שהשמות היו קצת ארוכים אז הציעו לקצר את הקידומת ל-BAD,
כמובן שזה לא עבר, הבעיה עם הקיצורים הללו הם שהם נוטים להיות מובנים למי שכתב אותם, ולאחר מכן שוקעים בתהום של הלא נודע, אנשים פוחדים לשנות וככה נהיים תקועים עם שם לא מוצלח במיוחד, שגם קצת קשה לחפש.



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

No comments:

Post a Comment