Layered design in software engineering

2-Lambda Expression

 

 شرح ال Lambda Expression

5-Lambda Expression

لو عندنا method وبنعمل Filter للعناصر بناءً على شرط معين  .
مثلاً عندنا List of integers وعاوزين نعملهم Filter بناءً أن ال Element >2 ,وهنا الشرط ثابت ومفيش مشكله وهنكتب ال function .

بس لو عاوزين اللى بيستخدم ال method هو اللى يحدد الشرط والشرط  غير  ثابت,يعنى مثلاً ممكن الشرط يكون Element >2 او Element <5 او Element ==2. وهكذا.

وهنا يجي دور ال Functional  Programming واللى هيساعدنا نحل المشكله .

فى ال object oriented ال method ال argument ممكن يكون int او string او reference of object وهكذا بس غير ممكن أن ال argument يكون Reference of Function  وكذلك بالنسبة لل Return Type.

فى ال  Functional Programming ال method ال argument ممكن يكون  Reference of Function وكذلك ال Return.

يبقى احنا هنخلى  ال argument  لل method يكون Reference of Function.
بمعنى اخر ان اللى بيستخدم ال method  , هيعرف Function بيستخدم الشرط اللى هو عاوزه وعند استدعاء ال method سوف يمرر لها  ال reference of function من اجل استخدامها.

فى ال Functional Programming يتم تسمية ال Function اللى بتسقبل function او بتعمل return ل function ب
 Higher-order function


يبقى الحل كالأتى:

1-المستخدم سيقوم باستخدام Function من اجل تحديد الشرط . 

فى الطبيعى لو بتعرف Function هتعرفها كالآتى:
  • } bool mymethod (int)  
    something//      
    ;return true   
    {

ومن أجل استخدام نستخدم ال Function   هنكتب: mymethod(2) 

ودا مفيد لو هنستخدم ال Function اكتر من مره  بس احنا عاوزين نعرف Function لاستخدامها مرة واحدة بس.

وهنا دور ال Lambda Expression .

ال   Lambda Expression تمكنا أن احنا نعرف   Anonymous Function.

  • (input-parameters) => expression
  • (input-parameters) => { <sequence-of-statements> }


هنا ال Lambda expression ال input هيكون x وال output هيكون x*x .

مثال اخر:
 

  • name =>{
  • string greeting = $"Hello {name}!";
    Console.WriteLine(greeting);
    };
هنا ال Lambda expression ال input عبارة عن name ويتم تنفيذ مجموعة من ال operation على ال name.



2-هنستخدم  ال method و نمرر لها ال  Lambda  expression .

3-FilterMethod سوف تستخدم ال Lambda expression function.

لو ال method تستقبل integer ال argument type هيكون int لو تستقبل  string ال type هيكون string وهكذا.
ال method  دلوقتى بتستقبل Function علشان تستخدمها ,والسؤال هنا ال type بتاع ال argument  هيكون ايه؟

وهنا هنقدم ال Delegate.

ال Delegate عبارة عن reference type ,باستخدامه نقدر نوصل لل Function ونستخدمها.
بأختصار ال Delegate عبارة عن Pointer بيشاور على ال Function.
واحنا بنعرف ال Delegate بنعرف ال method Signature اللى هيقدر ال Delegate يشاور عليها .

وبكدا ال delegate هيكون argument type لل method اللى هتستخدم Function.


  • [access modifier] delegate [return type] [delegate name]([parameters])    

مثال:

  • public delegate void DelType (string message)  

هنا عرفنا Delegate اسمه Del بيشاور على Function ال argument عبارة عن string وال return عبارة عن void.

ودلوقتى هنعرف ال Function .

  • public static void DelegateFunction (string message)  
        Console.WriteLine(message)       

 
ال Delegate من نوع DelType  يشاور على Function ويستدعيها.
  •  Instantiate the delegate//  
    DelType handler = DelegateFunction  

    Call the delegate//  
    handler("Hello World")   
وهنا عرفنا Pointer من نوع DelType اسمه handler بيشاور على ال Delegate Function ويستدعيها.


وال Delegate ممكن نستخدمه argument type لل method اللى هستقبل Function علشان تستخدمها.

مثال:

  • public static void MethodWithFunctioAsInput(int param1, int param2, DelType function)  
        function("The number is: " + (param1 + param2).ToString())      
     

ودلوقتى  هنستخدم MethodWithFunctionAsInput ونمرر لها  ال handler وهو عبارة عن Delegate Type يشاور على ال Function اللى هيتم استخدامها فى MethodWithFunctionAsInput.
  • MethodWithFunctionAsInput(1, 2, handler)   
  •   

والناتج عباره عن:

  • The number is: 3 




كدا احنا بنعرف ال delegate type بنفسنا  وبنستخدمه .

 #c تقدم generic delegate type  من اجل استخدامهم مثل FUNC و Action.

1-Func Delegate

  •     
  •  public delegate TResult Func<in T, out TResult>(T arg)    
  •   
TResult : ال return type للFunction.
T: ال input لل Function وممكن يكون عندنا اكتر من input.

  • Func<int, int, string> sum   
  •   
كدا احنا عرفنا delegate من نوع Func يشاور على Function ال return type هيبقى string وال input اتنين integers.

مثال:

  • Declare a Func variable and assign a lambda expression to the//   
    variable. The method takes a string and converts it to uppercase//  
  • ()Func<string, string> selector = str => str.ToUpper   
  •  

كدا احنا عرفنا delegate من نوع Func بيشاور على Function ال input عبارة عن string وال return عبارة عن string .

وال Functype فى المثال يشاور على Function من نوع Lambda expression ال input هيكون string وال return هيكون string.
  • ;"string name = "mahmoud 
  •         string result = selector(name) 
  • output : MAHMOUD// 


2-Action Delegate

هو عبارة عن Delegate Type مثل Func Delegate بس الفرق أن ال Action Delegate دائماً يشاور على ال Function بدون return type.


  • public delegate void Action<in T>(T obj) 

مثال:


  •     Action<int> printActionDel = i => Console.WriteLine(i) 
           
        printActionDel(10) 


...

تعليقات