ראינו בפעמים הקודמות מה זה Anonymous delegates ואיך משתמשים בהם.
הבעיה העיקרית שאנחנו נתקלים בה היא שכתיבה של Anonymous delegate היא קצת זוועתית, למשל אפילו בדוגמה הכי פשוטה שראינו ביום ראשון, היינו צריכים לכתוב משהו כזה:
|
|
או כזה:
|
|
בC# 3.0 הגיעו למסקנה שזה פוגע בקריאות וגורם לאנשים לסלוד משימוש בAnonymous delegates.
לכן באו והציגו את הפתרון באמצעות Lambda Expressions.
מה זה Lambda Expression? מדובר על גישה כללית שמגיעה מתחום הלוגיקה המתמטית שנקראת תחשיב למבדא.
אחת המטרות היא לצמצם את כתיבת הגדרת פונקציות בצורה פורמלית.
בC# זה בא לידי ביטוי כך:
נוכל לכתוב במקום
|
|
כך:
|
|
אלא שאפשר עדיין להתווכח ולומר שהביטוי לא קריא.
גילו שמסתבר שככל שמציינים פחות, הביטוי נהיה יותר קריא. למשל מאחר והחתימה של הdelegate נראית כך:
|
|
אין צורך שנציין את הסוג של הארגומנט בשני הצדדים, אלא הקומפיילר יגלה את זה implicity בזמן בקימפול.
אז הביטוי נהפך להיות כזה:
|
|
בנוסף, בגלל שמדובר בפרמטר אחד, מותר לנו להשמיט את הסוגריים סביבו:
|
|
לבסוף, בגלל שיש לנו שורת קוד אחת, והיא של return, נוכל גם להסיר את הסוגריים ואת הreturn:
|
|
הביטוי נהיה מאוד פשוט והרבה יותר קריא!
קצת על כתיבה של Lambda expressions:
בד"כ לא נצטרך לציין את סוגי הפרמטרים, אלא רק לתת להם שמות. אם מדובר על יותר מפרמטר אחד, נצטרך לשים סביב הפרמטרים סוגריים:
למשל אם יש לנו את הdelegate הזה:
|
|
נוכל להציב לתוכו את הביטוי הבא:
|
|
אם מדובר על delegate שלא מקבל פרמטרים, גם נצטרך לשים סוגריים:
|
|
שימו לב לסוגריים הריקים.
גם אם יש לנו חתימה שלא מחזירה ערך נוכל להשתמש בצורת כתיבה של שורה אחת:
|
|
לבסוף, אם יש לנו מימוש של יותר משורה אחת, עדיין נוכל להשתמש בLambda Expression, אבל עם סוגריים מסולסלים:
|
|
שימו לב שזה עדיין יותר קריא מהכתיב של anonymous methods.
סופ"ש אנונימי מצוין