none
anonymous function RRS feed

  • שאלה

  • מה זה בדיוק? משהו יכול להסביר לי בבקשה??

    תודה !

    • הועבר על-ידי Arik Poznanski יום שישי 12 אוגוסט 2011 08:36 רלוונטי לפורום #C (מאת:פיתוח ב- .Net)
    • הועבר על-ידי Hengzhe Li יום רביעי 18 ינואר 2012 07:33 (מאת:Microsoft Visual C#)
    שבת 05 מרץ 2011 10:23

תשובות

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

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

    כדי להציב לתוך משתנה פונקציה, אנונימית או רגילה (בעלת שם), יש לתת שם לחתימת הפונקציה, ע"י שימוש בפקודת delegate.
    לדוגמא, קטע הקוד הבא מגדיר חתימה של פונקציה שמקבלת שתי פרמטרים מטיפוס int ולא מחזירה כלום (void),
    לחתימה שהוגדרה נותנים את השם TwoParamsFunction:

    delegate void TwoParamsFunction(int first, int second);
    

    לאחר שהגדרנו חתימה כנ"ל ונתנו לה שם ניתן להגדיר משתמשים מטיפוס זה ולהציב בו ערכים.
    לדוגמא, קטע הקוד הבא מגדיר פונקציה (לא אנונימית) בשם Add ואז מגדיר משתנה מהטיפוס TwoParamsFunction ומציב בו את הפונקציה Add.
    לאחר שהצבנו את הערך ניתן להפעיל את הפונקציה דרך המשתנה:

    delegate void TwoParamsFunction(int first, int second);
    
    static void Add(int first, int second)
    {
      Console.WriteLine(first + second);
    }
    
    static void Main(string[] args)
    {
      TwoParamsFunction addFunc = Add;
      addFunc(5, 4);
    }
    

    כעת נראה כיצד ניתן להגדיר פונקציה אנונימית.
    קטע הקוד הבא מגדיר פונקציה אנונימית ומציב אותה בתוך משתנה מטיפוס TwoParamsFunction:

    TwoParamsFunction subFunc =
      delegate(int first, int second)
      {
        Console.WriteLine(first - second);
      };
    subFunc(5, 4);
    
    

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

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

    דרך אגב, ביטויי למדה, Lambda Expressions הם בסך הכל עוד דרך (סינטקס) להגדיר פונקציה אנונימית.


    Arik Poznanski
    blogs.microsoft.co.il/blogs/arik

    • הוצע כתשובה על-ידי Arik Poznanski שבת 05 מרץ 2011 22:45
    • סומן כתשובה על-ידי Shirly11 יום ראשון 06 מרץ 2011 09:03
    שבת 05 מרץ 2011 22:45

כל התגובות

  • ולמה צריך delegate ? אי אפשר ישירות לקרוא לפונקציה?
    שבת 05 מרץ 2011 10:58
  • פונקציה אנונימית היא פונקציה שמוגדרת בתוך הקוד שמשתמש בה, בדרך כלל כאשר מעבירים פונקציה כפרמטר או מציבים פונקציה בתוך משתנה.

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

    כדי להציב לתוך משתנה פונקציה, אנונימית או רגילה (בעלת שם), יש לתת שם לחתימת הפונקציה, ע"י שימוש בפקודת delegate.
    לדוגמא, קטע הקוד הבא מגדיר חתימה של פונקציה שמקבלת שתי פרמטרים מטיפוס int ולא מחזירה כלום (void),
    לחתימה שהוגדרה נותנים את השם TwoParamsFunction:

    delegate void TwoParamsFunction(int first, int second);
    

    לאחר שהגדרנו חתימה כנ"ל ונתנו לה שם ניתן להגדיר משתמשים מטיפוס זה ולהציב בו ערכים.
    לדוגמא, קטע הקוד הבא מגדיר פונקציה (לא אנונימית) בשם Add ואז מגדיר משתנה מהטיפוס TwoParamsFunction ומציב בו את הפונקציה Add.
    לאחר שהצבנו את הערך ניתן להפעיל את הפונקציה דרך המשתנה:

    delegate void TwoParamsFunction(int first, int second);
    
    static void Add(int first, int second)
    {
      Console.WriteLine(first + second);
    }
    
    static void Main(string[] args)
    {
      TwoParamsFunction addFunc = Add;
      addFunc(5, 4);
    }
    

    כעת נראה כיצד ניתן להגדיר פונקציה אנונימית.
    קטע הקוד הבא מגדיר פונקציה אנונימית ומציב אותה בתוך משתנה מטיפוס TwoParamsFunction:

    TwoParamsFunction subFunc =
      delegate(int first, int second)
      {
        Console.WriteLine(first - second);
      };
    subFunc(5, 4);
    
    

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

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

    דרך אגב, ביטויי למדה, Lambda Expressions הם בסך הכל עוד דרך (סינטקס) להגדיר פונקציה אנונימית.


    Arik Poznanski
    blogs.microsoft.co.il/blogs/arik

    • הוצע כתשובה על-ידי Arik Poznanski שבת 05 מרץ 2011 22:45
    • סומן כתשובה על-ידי Shirly11 יום ראשון 06 מרץ 2011 09:03
    שבת 05 מרץ 2011 22:45