» נושאי לימוד
» נושאי לימוד
יום חמישי 2 במאי 2024
Naming Conventions הלכה למעשה
דף ראשי  מתחילים לכתוב – עקרונות בקידוד  Naming Conventions הלכה למעשה גרסה להדפסה

ונעבור לקצת ת'כלס.

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

ובכן, למה נעניק שמות במהלך הקידוד?

ובכן, בעצם לכל דבר שאיננו מילה שמורה בשפה:

 

שם לקובץ

 

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

  • הקובץ הראשי
    ייקרא כמעט תמיד main עם הסיומת הרלוונטית לשפה. בכל שפה יש main שממנו מתחילה ריצת התוכנית ומשם מתפצל עץ הקריאות לשגרות. בתוכניות הקצרות שכתבתם עד כה בדרך כלל כל הקוד ישב בקובץ אחד, כולל ה-main. אם כן, לא אמור להיות בקובץ הראשי כמעט שום דבר חוץ מהקוד של ה-main.
  • קובץ המכיל מחלקה
    ייקרא באותו שם של המחלקה בהשמטת הקידומת C.
  • קובץ של שגרות שירות ללא מחלקה (Utilities)
    ייקרא על שם הנושא שבו עוסקות השגרות בשרשור המילה Utils כדי לציין שיש בקובץ שגרות שירות ולא מחלקה כלשהי. למשל, קובץ המכיל אוסף של שגרות שירות מתמטיות ייקרא MathUtils.xxx.
    שים לב!
    רק במערכות תוכנה בינוניות ומעלה יש מקום לקבצי utilities. יש להיזהר מהפיכת קבצים אלה ל"מחסן" של כל מה שלא מצאנו מקום יותר טוב בשבילו עקב עיצוב לקוי. אם מצאת את עצמך שם בקובץ זה עוד ועוד שגרות כלליות "בינתיים", אז זה הזמן לבצע סקר עיצוב חוזר ולחלק מחדש את המחלקות והשגרות.

 

שם למתודה/שגרה

  • השגרה מוגדרת במקום אחד, אבל קוראים לה בהרבה מקומות. מה שרואים במקומות האלה, זה את השם שלה. לכן חובה ששם השגרה יתרום לקריאות התוכנית שקוראת לה.
    לשם כך, השם של השגרה צריך להבהיר את פעולתה.
  • שם השגרה צריך להיות קצר, קולע וברור.
  • השם של השגרה צריך להשתלב בקריאות לו ובפרמטרים שלו, ככה שהרצף של הקריאה שלהם תהיה הגיונית. זה לא אומר שהם חייבים ליצור משפט באנגלית, אבל שיצא הגיוני לתוכניתן שקורא.
  • מבחינה סטנדרטית החוקים לכתיבת שם שיגרה זהים לאלו של כתיבת שם משתנה, מלבד שאין איזכור לסוג המשתנה. למשל:
     PerfromCalculation
  • כדי להשתמש בשגרה יש לשלוח את הפרמטרים להם השגרה מצפה.כדי להשתמש בשגרה חשוב להבין את משמעות הפרמטרים שנשלחים אליה ואת השפעתם על פעולתה.
  • חשוב ששגרה תקבל מעט פרמטרים, שתהיה ברורה המשמעות שלהם (השם של השגרה יכול לעזור המון, ושמות הפרמטרים חייב לעזור עוד יותר), ושפעולת השגרה לא תושפע יותר מידי מהפרמטרים (צימוד נמוך).
    • דוגמא רעה
      שגרה לטיפול בגיבוי שמקבלת פרמטר, שאם ערכו 1, היא מגבה, אם ערכו 2, היא משחזרת מהגיבוי. שים לב שהמשפט המתאר את השגרה חייב להיות די מסובך. זה צריך להדליק אור אדום.
    • דוגמא טובה (אבל טריוויאלית)
      פונקציה שמחברת שני מספרים, יכולה לקבל בפרמטרים הראשון והשני כל מני ערכים, אבל בכל מקרה, היא תחבר אותם. הפעולה לא משתנה
    • דוגמא טובה (אבל מפתיעה)
      פונקציה שמקבלת שני מספרים ואופרטור, ומפעילה את האופרטור על שני המספרים. האופרטור יכול להיות +, -, *, / או %, ולכל אחד תתבצע הפעולה המתאימה. טוב או רע? יש הרבה פעולות... אז זה רע... לא! לוגית, מדובר בפעולה אחת, שאפשר להסביר אותה לתוכניתן במשפט אחד: "ביצוע פעולה חשבונית על שני מספרים"

שם למשתנה

  • הגדרת המשתנים תבואנה בתחילת ה- Form/מודול/שגרה.
  • שמות משתנים הכוללים מושגים השייכים לתחום העיסוק המקצועי של המערכות לדוגמא – CustomerID או AchievedDistance. השמות לא ייכתבו ב"אינגלוז" (כתיבת המילה העברית באותיות אנגליות) אלא יתורגמו למילה המתאימה באנגלית. למשל:

       int KamutSfarim;

    int QuantityOfBook

 

  • שמות בוליאניים צריכים לשקף את ערך ה"אמת" שלהם בהקשר של עולם התוכן. דוגמא:
    IsObjectInList
    IsEmployeeinList 

סוג

דוגמא

הסבר

משתנה
מקומי

int nNoOfBaloons = 0

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

משתנה
גלובאלי

extern int g_HorseNo

למשתנים גלובאליים נוסיף התחילית
_g

קבועים

#define _VEC_SIZE 100
const int MIN_AGE = 18

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

Enum

enum DaysOfWeekEnum
{
   SUNDAY = 1,
   MONDAY,
   ...
};
typedef enum DaysOfWeekEnum DaysOfWeek

שם ה-enum יירשם עם אות גדולה
בתחילת כל
מילה
ויקבל הסיומת Enum.
ערכי ה-enum יי
כתבו באותיות גדולות.
בנוסף, נגדיר typedef מייד אחרי ה-enum
(ללא רווח) עם אותו שם אך ללא הסיומת Enum.

Struct

struct PersonDetStruct
{
   int nAge;
   char* ptrName;
};
typedef struct PersonDetStruct PersonDet;

כאן יחולו אותם כללים כמו ל-Enum
מלבד הסיומת שניתן לטיפוס: Struct

טיפוס - Type

typedef double RatioType;

גם כאן יחולו אותם כללים כמו ל-Enum
מלבד הסיומת שניתן לטיפוס: Type

מחלקה

Class CEmployee {...}

מחלקה (Class) תיקרא בשם משמעותי , תתחיל באות גדולה ותוקדם ב-C לציון Class.
למשל - CEmployee

מערך

[int arrnAges[SOL_NUM

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

מחרוזת

szMyName

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

מצביע

int* pnSumPointer

מצביע למשתנה מסוג integer

מופע של
אוביקט שנוצר
על ידנו

PersonDet prsnIdtMoshe

DaysOfWeek dysofwkLastWeek

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

Data Member

int m_CustomerID;

int* m_pCustomerID;

את שם המשתנה יקדים m_ שיבהיר שמדובר ב-member

 

 

 12-03-04 / 23:57  עודכן ,  06-03-04 / 00:15  נוצר ע"י ישי קנובל בתאריך 
 Naming Conventions - עקרונות מנחים בקביעת שמות - הקודםהבא - שימוש בקבועים 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 4