המדריך לטרמפיסט בגלקסיה של הגיקים חלק ד’

23 בNovember 2013

או מבוא ל-איך כותבים קוד נכון ??
אז הנה ממשיכים במדריך לטרמפיסט..
כטרמיפיסטים עקשניים הגיוני שהתקבלתם למקום עבודה כלשהו הדבר הראשון שתקבלו עליו בראש מ”הגיקים” (מפתחים מנוסים יותר, ובעיקר מראשי צוותים ומנהלים) תהיה על איכות הקוד,
שימו לב אני לא מדבר על יעילות אלא על איכות. שזה אומר תיעוד, פיסוק, שמות משתנים, וכו’ זאת אומרת ניתן להתווכח הרבה איך לכתוב קוד ,
להשתמש בForEach או בLinq , איך לנהל Try Catch, איך מתכננים Flow של פונקציה,
אני אבל מדבר על שלב מוקדם הרבה יותר. על קריאות של הקוד ושמירה על סטנדרטים.
אז כדי להקטין את החיכוך שלנו בני האדם, בשעת מגע ראשוני עם ה”גיקים” אני מעלה פוסט זה..
נתחיל עם תיעוד:
זאת חובה, לא בושה, ישנם נהלים שונים שפגשתי במקומות עבודה שונים, נתקלתי אפילו במקום שהתקינו תוסף ל Visual Studio שחייב את המפתחים מעל כל פונקציה להוסיף הסבר.
ואין מה לחשוב על “טוב ברור שהפונקציה מחלקת מספר ל2” תוסיפו שורה קצרה כי סביר להניח בקצב של 10-30 פונקציות ביום אחרי שבוע או פחות גם אתם לא תזכרו מה עושה הפונקציה.
ההסבר צריך להיות תמציתי וברור, לדוגמא הפונקציה הבאה:
Public int Add(int a, int b)

{

  Return a+b;

}

נוסיף את השורה “returns the value of two numbers”
ונקודה חשובה מאוד, לעולם אבל ממש לעולם אל תרשמו תיעוד בעברית!! (או כל שפה אחרת)זה רע מאוד. ה”גיקים” לעולם לא יסלחו על פשע כזה.
גם אם אנגלית אינה שפת אם שלכם תעתיקו את השורה המבוקשת לבבילון למורפיקס או ל google Translate. וקיבלתם משהו סביר, גם אם לא יהיה מדהים.
התיעוד נכתב בד”כ מעל הפונקציה ולא בתוכה, אבל לפי הצורך נוסיף גם שורות תיעוד מעל שורות קוד.
תיעוד על קלאס:
מקובל מאוד ושוב זה משתנה ממקום למקום, (הייתי אומר שמקובל פחות היום ערב ריבוי קלאסים במערכת אבל מנסיוני זה עוזר מאוד)
לכתוב בתחילת כל מסמך שמתאר אובייקט או אינטרפייס כמה שורות כמו תאריך יצירת הקלאס , שם המתכנת המייצר (שימו לב זה מחייב לקוד איכותי..) ומה התפקיד של הקלאס באופן כללי.
שימוש בתג Summary
לחיצה של פעמים על / פותחת לנו תגית Summary.
   1: /// <summary>

   2: /// 

   3: /// </summary>

שזה לא סתם תיעוד אלא תיעוד סופר חשוב עם יכולות נוספות,
לדוגמא שמירה אוטומטית שמקרה של יצירת קובץ XML שמתעד את הפרויקט, intellisense
למי שמשתמש במה שהגדרנו ומאפשר לו לקבל את המידע שרשמנו בתוך התגית, כמו גם הצגה לObject Browser של visual Studio
שימוש בREGION:
כלי חשוב מאוד בעיצוב מסמכי קוד הוא שימוש באיזורי קוד (Region) בשפת Visual Studio. פשוט יצרים בקוד את המבנה הבא :
   1: #region ABCDEFG

   2:

   3: #endregion

מקובל להחזיק אזור כזה לקונסטרקטור , למשתנים מקומיים, לפרופרטיז, למתודות, Events, Delegates ולפי הצורך והנוהג במקום העבודה שלכם.
יש שמגדירים internal regions , לדוגמא Private ו Public בתוך אזור של פונקציות, אני פחות אוהב את זה כי בעת צמצום (Ctrl+m+o ) אנו מפספסים מידע חשוב אז לשיקולכם.
שמות פונקציות וקלאסים:
איך לבחור שם לפונקציה או קלאס? זאת דילמה שתחלוף עם הניסיון אבל השם צריך לרמוז לנו על המשמעות.
ויש להימנע משמות מקוצרים כמו Class OBJ, Class DATA, או בפונקציות func, F,Div, ואפילו GetValue כי מה המשמעות של GetValue ?? איזה ערך? מאיפה? קצת מחשבה זה הכל,
מי שיקרא את הקוד שלכם יבין אותו יותר טוב.
אותיות ראשיות:
הרשימה הבאה היא קבועה ומוחלטת מראש אצל 99 אחוזים מאנשי התכנה:
Namespace,
Class,
Ineterface,
Struct,
Enum Type
Enum Vlaue,
Public Field,
Property,
Functions,
Delegate & Events.
בכל מקרה שאנו מגדירים אחד מהרשימה נשתמש באות גדולה בפתיח.
במקרים של משתנים מקומיים משתמשים באות ראשונה קטנה ויש לפעמים שהיא מקבלת תוספת כמו
  m_value , p_value , l_value כל אלה מהווים פתיח של מילים ידועות מראש כמו Local , Member , Private .
גם שמות של פרמטרים בחתימת הפונקציה או הקונסטרקטור יהיו באות קטנה.
שרשור מילים בשמות:
כאמור, החלטנו על שם ארוך לפונקציה, אז כל תחילת מילה תהיה באות גדולה או עם רווח של _ (פחות מקובל) לדוגמא:
private void SwitchUSerContext או  private void Switch_User_Context
Delegates & Enum :
הגדרת Delegate או Enum תהיה באותו במסמך של הקלאס המרכזי שמשתמש בהם מעליו לדוגמא :
   1: public enum MyEnum

   2:   {

   3:     A, B

   4:   }

   5:

   6: public delegate void MyDelegate(int i);

   7:

   8: class MyClass

   9: {

  10:     public MyClass()

  11:     {

  12:         // MyDelegate…..

  13:         // MyEnum…

  14:     }

  15: }

ובמקרה שהם בשימוש יותר מאשר בקלאס שלנו נמקם במסמך יותר כללי. אני מניח שברור לנו שכל קלאס או אינטרפייס מקהל מסמך נפרד..
תוספות קבועות מראש:
לשמות טיפוסים מסוימים מקבלים תמיד (בד”כ) תוספת שם קבועה.
   1: //Exception,

   2: public class WromgInputException : Exception

   3: {

   4:

   5: }

   6: //Events,

   7:   public event MyDelegate MyClassEvent;

   8:

   9: // Attribute,

  10: public class MyClassAttribute : Attribute

  11:     {

  12:

  13:     }

הגדרת Events:
שימוש באירועים מצריך מונחים קבועים כאמור שם האירוע יסתיים תמיד במילה Event.
הפונקציה שמרימה אותו תקרא RiseEvent או משהו דומה, והפונקציה שמאזינה לאירוע תקרא OnEvent או משהו דומה כמובן בצירוף שם הevent משורשר בחתימה.
טיפ לסיום :
אם נרצה שהקוד שלנו יפגין מקצועיות שננסה לאמץ את הגישה הבאה:
במקום לכתוב שורה כזאת:
   1: string value = "";

נסו להשתמש באחת משתי הדרכים הבאות:
   1: string value = String.Empty;

   2: string value = default(string);

ולהבין לבד במקרים דומים מה כדאי לעשות..
ואל תשכחו לחגור חגורות בהמראה.. טיסה נעימה!!
הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *

תגובה אחת

  1. xetra13 בApril 2014 ב 8:34

    well, nice article , not exactly the best but nice

    Reply