
הטקסט המלא של הדקות הראשונות בהרצאה «פונקציות - עשה ואל תעשה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו איך אנחנו יכולים לבנות פונקציה, איך אנחנו יכולים לקרוא לה, לשלוח ארגומנטים, לקבל ערך מוחזר ועוד כל מיני טריקים לגבי פונקציות, בואו נראה כל מיני חוקים לגבי מה נכון לעשות ומה לא נכון לעשות כאשר בונים פונקציות.
חוקים לגבי בניית פונקציות. אז קודם כל ישנם מספר כללים כמו כללי אצבע כאלה של איך נכון לבנות פונקציות. אם אנחנו שומרים על הכללים האלה אנחנו מצליחים לבנות קוד שהוא נכון, הוא מכיל אפיון נכון ומאוד קל לשימוש ולתחזוקה.
אם אנחנו מתעלמים מהכללים האלה שכבר אנחנו נראה אז הקוד שלנו הופך להיות קוד גרוע, bad design מה שנקרא, bad coding. בואו נראה מה הכללים האלה אומרים.
דבר ראשון, שם הפונקציה חייב להיות משמעותי, זה הגיוני. אין לבצע קיצורים, קיצורים זה כמובן לא טוב, כמו במשתנים. חשוב ששם הפונקציה יהיה שם של פעולה ולא שיהיה שם של עצם, ברוב המקרים בוא נגיד, ובג'אווה שמות פונקציות צריכות להיות lower camel case, כמו שמות של משתנים.
אז בואו נראה מספר דוגמאות. האם הפונקציה הזאתי טובה? השם px? אז כמובן שלא. מה זה בדיוק px? זה בכלל לא שם משמעותי.
האם השם הזה טוב לשם של הפונקציה הזאת שמה שאנחנו רואים היא מציגה פה על המסך כל מיני פעולות שאפשר לעשות עם לדוגמה כספומט PRT. אז PRT זה נראה כמו קיצור של משהו של אולי פרינט לא שם טוב האם השם הזה טוב זה כבר מתחיל להיות שם יותר משמעותי אבל הייתי אומר שלא מפני שפרינט זה שם כללי מדי מה בדיוק הוא אמור להדפיס מי שקורא לפונקציה הזאת בעצם לא יודע מה היא אמורה כל כך להדפיס לפי
השם. האם היא אמורה להדפיס פרטים של משתמש, תפריט, אולי להדפיס חתול? האם השם הזה טוב?
זה כבר מתחיל להיות יותר שם שקשור למה היא עושה, אבל עדיין לא הכי טוב, מפני ששם מניו זה לא שם של פעולה, זה שם עצם.
אז יש לנו פה את פרינט מניו. האם השם הזה מספיק טוב? עדיין לא, כי זה לא לואור קאמל קייס. ולבסוף יש לנו את פרינט מניו בצורה כזאת, פי קטנה, אם גדולה, וזה כמובן שם נכון לפונקציה.
גם שם משמעותי, לא מקוצר, לואוור קאנל קייס, עובד. כלל מספר 2. פונקציה צריכה לבצע מטלה לוגית אחת ויחידה. האם הפונקציה הזאת טובה?
פרינט סקוויר אנד טריאנגל, ואנחנו רואים שהיא מציגה גם ריבוע וגם משולש. אז כמובן שלא. הפונקציה מבצעת שתי מטלות לוגיות.
האם הפונקציה הזאת בסדר, הפונקציות האלה בסדר? הראשונה Print Square, השנייה Print Triangle. אז כן, כל אחת מבצעת מטלה לוגית אחת.
כלל מספר שלוש, פונקציה צריכה להיות מספיק כללית בכדי לבצע וריאציות שונות של אותה המטלה הלוגית. בואו נראה. האם הפונקציה הזאת מספיק טובה?
Print Line of Stars? לא. היא מציגה רק 10 כוכביות. מה יקרה אם אני ארצה להציג 12 כוכביות? היא כבר לא טובה לי.
אז אנחנו משיגים את הדבר הזה על ידי שליחת פרמטרים לפונקציה. בואו נראה את הפונקציה הזאת. print line of stars שמקבלת int size. מעולה.
הפונקציה הזאת יכולה להציג כל קו של כוכביות, כל אורך קו. והפונקציה הזאת אפילו יותר טובה מפני שהיא מקבלת במקום כוכבית את ה-char להדפיס, כך היא יכולה להיות עוד יותר כללית ולהדפיס כל קו שאנחנו רוצים, לאו דווקא כוכביות.
אוקיי, בואו נראה את הדבר הבא. 4. פונקציה חישובית לא אמורה להציג את תוצאת החישוב, אלא היא צריכה להחזיר את תוצאת החישוב. האם הפונקציה הזאת בסדר?
Calc Average ומה שעושה המחשבת ממוצע ומציגה אותו. כמובן שלא, אנחנו לא נוכל להשתמש בה אם אנחנו נרצה לבצע חישוב ממוצע, ולא להציג אותו על המסך אז הפונקציה הזאת היא לא בסדר וחוץ מזה שהיא מפרה את הכלל של פונקציה לא מבצעת שתי פעולות לוגיות שונות כאן הפונקציה הזאת היא גם מחשבת וגם מציגה
בואו נראה את הפונקציה הזאת Calc Average מבצעת חישוב ומחזירה את החישוב נראית בסדר גמור 5 פונקציה לא אמורה לקבל ארגומנט שהיא לא משתמשת איתו האם הפונקציה הזאת בסדר היא מקבלת מערך היא מקבלת כותרת להצגה והיא מקבלת פוטר, כותרת תחתונה, אבל היא לא משתמשת עם הפוטר, אז כמובן שהיא לא בסדר.
היא לא מבצעת שימוש בפוטר, היא לא אמורה לקבל את הפוטר. האם הפונקציה הזאת בסדר? היא מקבלת רק את המערך ומקבלת את ההדר להצגה, מציגה את ההדר ומייד אחר כך מציגה את המערך.
נראה שהיא בסדר גמור, היא משתמשת בכל הארגומנטים שלה. האם הפונקציה הזאת בסדר? היא מקבלת מערך, ופוטר מציגה את ההדר, מציגה את המערך, מציגה את הפוטר, משתמשת בכל הארגומנטים שלה, אין איתה שום בעיה.