תמוז

ביטוי למדה

ביטויי למדה קיימים ב-#C כבר מגרסה 3.0. יש להם כמובן יתרונות (בשביל מה להגדיר מתודה עבור משהו שמתרחש פעם אחת בלבד?) וחסרונות (כשיש קטע קוד שמבצע משהו עצמאי, יותר מסודר להוציא אותו החוצה כדי להקל על קריאות הקוד). אבל בלי קשר ליתרונות וחסרונות, מה שמאד בולט בביטויי למדה זה התחביר המוזר שלהם.

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

  1. המחבר מתחיל במתודה רגילה המחזירה ערך בוליאני.
  2. מאחר שהמתודה הזאת נקראת פעם אחת, הוא מציע להכניס אותה לגוף הקוד שמשתמש בה.
  3. כמובן שאם היא נמצאת בגוף הקוד ולא קוראים לה, אז היא לא צריכה שם, והיא גם לא צריכה מאפיין שמסווג אותה ל-private או public
  4. מאחר שהמהדר (קומפיילר) הוא חכם, גם אין צורך להצהיר איזה סוג משתנה מחזירה המתודה, משום שאת התוצאה משימים למשתנה שהמהדר כבר יודע מאיזה סוג הוא
  5. גם ידוע שהמתודה הקוראת, עובדת על סוג משתנה מסויים, ולכן ברור שזה המשתנה שעובר למתודה האנונימית
  6. אחרי זה אפשר גם להוריד סוגריים מיותרים, ונקודה-פסיק מיותרת
  7. הבעיה היא שאם גם מורידים כמה רווחים, הביטוי נעשה קשה לקריאה, אז צריך דרך חדשה להפריד בין פרמטרי הקלט לגוף המתודה, וב-#C המפריד הזה הוא אופרטור ה <=
  8. כעת ניתן להוריד סוגריים נוספים
  9. ולמה לכתוב שמות משמעותיים למשתנים, אפשר פשוט לכתוב רק אות ראשונה

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

כתבו תגובה

כתובת הדוא"ל שלכם לא תוצג.