Wednesday, July 3, 2013

שמות בעלי משמעות

חלק מאוד חשוב בקוד ובקוד נקי הם השמות של אבני הבניין שמשמים לבניית התוכנה.
אנחנו משתמשים בשמות לכל דבר, גם בחיים, כדי לסווג דברים, וגם כדי לספר את הסיפור.
קוד תוכנה עם שמות נכונים יכול לספר את הסיפור של התוכנה גם ללא להכנס לתיעוד מעיק.
לכן, כצעד ראשון רצוי להשתמש בשמות שמגלים את המשמעות של האובייקט.
לתת שמות טובים לוקח זמן, לפעמים מתעכבים על הנושא קצת וזה מרגיש שזה "מבזבז" זמן, אבל בעתיד שמישהו, אפילו מי שכתב את הקוד, בא לתחזק את הקוד הרבה מאוד זמן פיענוח נחסך.
לדוגמא,
Int x; // current number of people in the room

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

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

        private List<int> GetThem(int p1, int p2, int p3)
        {
            var theList = new List<int>();

            for (int i = p2; i < p3; i++)
                if (i % p1 == 0)
                    theList.Add(i);

            return theList;
        }
הקוד מעלה הרבה שאלות, וקצב ה-WTF/Minute גבוה, כזכור, זהו המדד היחידי לקוד נקי.
האם אתם מבינים מקריאה ראשונית זריזה מה היא עושה?
מה זה theList? מה היא מכילה?
מה זה p1,2,3 מבלי להכנס לקוד?
מה המשמעות של ההשוואה ל-0?
ומי זאת הפונקציה GetThem בכלל למה זה עושה GET?
עכשיו תקראו את הפונקציה הבאה, כל השינוי היה שינויי שמות שמתאימים ורומזים מה היא עושה





        private List<int> GetAllNumbersDividedByDividerInRange(int divider, int lowerRange, int upperRange)
        {
            const int NO_REMAINDER = 0;
            var numbers = new List<int>();

            for (int number = lowerRange; number < upperRange; number++)
                if (number % divider == NO_REMAINDER)
                    numbers.Add(number);

            return numbers;
        }

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

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

No comments:

Post a Comment