פעם שעברה ראינו מה זה delegate אנונימי.
הרבה אנשים עשויים לחשוב (ולעתים, בצדק) שמדובר בסה”כ בקיצור מרושל לכך שלא היה למתכנת כוח לכתוב מתודה שתעשה בשבילו את העבודה.
אני אדגים עכשיו משהו שקל לעשות באמצעות anonymous delegates, ויותר מסובך לעשות בלי.
נניח שאנחנו רוצים לכתוב פונקציה שתדפיס את כל המחרוזות הבינאריות בגודל מסוים. זו משימה שנראית מאוד פשוטה, והנה קוד שרושם את כל המחרוזות הבינאריות בגודל 5:
|
|
כפי שאנחנו רואים, פשוט יש לנו 5 לולאות מקוננות אחת בתוך השנייה ואנחנו מדפיסים בכל פעם את הערכים של כולם משורשרים.
אז מה הבעיה?
נניח שאנחנו רוצים בצורה זו להדפיס את כל המחרוזות הבינאריות לפי גודל של פרמטר שקיבלנו.
נצטרך ליצור מספר לולאות מקוננות בגודל המספר שקיבלנו.
בעייתי קצת, לא?
שתי אופציות קלאסיות לפתור את הבעיה שאני מעלה עכשיו, הן הבאות. הראשונה היא להשתמש בייצוג הבינארי של המספר ואז לרוץ עד $ 2^n $. (פתרון איטרטיבי)
השנייה היא להשתמש ברקורסיה.
אני אראה דרך שלישית באמצעות anonymous delegates:
ניצור delegate כזה
|
|
כעת ניצור לו מימוש שמשרשר את $ 0,1 $ רק פעם אחת:
|
|
זה משרשר את $ 0 $ ו$ 1 $ לכל איבר שקיבלנו.
כעת נבצע הרכבה של פונקציות ונרכיב את הפונקציה הזאת עם עצמה הרבה פעמים:
|
|
מה שעשינו בעצם זה פונקציה שמקבלת מספר n ויוצרת פונקציה חדשה שנראית כמו הקריאה
|
|
כאשר השרשור הוא $ n$ פעמים.
כעת נוכל לקרוא לה כך:
|
|
המשך יום אנונימי טוב