- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
شرح ال 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 = DelegateFunctionCall 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)
...
تعليقات
إرسال تعليق