دالة Lambda في الكوتلن
السلام عليكم و رحمة الله و بركاته
تعلمنا في الدروس السابقة عن الدوال أن الدوال لابد أن يكون لها اسم أي تعريف للدالة و ذلك أيضا في أغلب لغات البرمجة, و يكون تعريف الدالة كالتالي, fun متبوعة باسم الدالة و الأقواس و من ثم جسم الدالة function body {}:
fun swim()
{
//swim
}
في هذه المقالة معلومات أساسية عن دوال الـ lambda في الكوتلن...
الكوتلن تدعم الـ lambda function و تسمى في بعض لغات البرمجة anonymous function
في البداية ما هي الـ Lambda function ؟؟
ابسط تعريف وجدته لها هو (is an expression that makes function) فبدلا من تعريف دالة لها اسم , سنقوم بتعريف دالة ليس لها اسم
أبسط مثال لها:
{ println("I like swimming!!") }
لابد في ال lambda:
* أن تكون محاطة بالأقواس { }
* ليس لها تعريف أو اسم كما هو واضح من المثال السابق.
هي دوال يمكن التعامل معها كقيم values, اذن ماذا ممكن أن نعمل بها:
* يمكن اسنادها إلى متغيرات :
val swim = {println("I like swimming !")}
val swim:()-> Unit = {println("I like swimming !")}
نلاحظ في المثال السابق تم كتابة نوع المتغير في السطر الثاني و هذا اختياري للمبرمج!!
ثم نستطيع مناداة الـ swim كدالة كالتالي: (لا تنسى الأقواس بعد اسم المتغير!!)
swim()
//output
I like swimming!
* يمكن في دوال الـ lambda أن تستقبل argument أي مدخلات, و تعود بقيمة أيضا نعرفها كالتالي:
{ num : Int -> num * num}
حيث يسار السهم الـ lambda argument
و يمين السهم lambda body
و السهم يسمى function arrow
المثال التالي تم إنشاء دالة lambda تستقبل عدد و تعود بمربع هذا العدد, ثم تم اسناد دالة lambda إلى المتغير square:
val square = { num : Int -> num * num}
و نستطيع اختياريا أن نضع نوع المتغير:
val square : (Int) -> Int = { num : Int -> num * num}
في الشكل التالي شرح للدالة أكثر:
أخيرا نستطيع مناداتها كالتالي:
square(2)
//output is 4
*أيضا يمكن تمرير Lambda function كـ argument أي مدخلات لدوال أخرى ...هذه الجزئية تحتاج كوب قهوة !! :)
سأبدأ بشرحها خطوة بخطوة:
في المثال السابق أنشأنا lambda function تقوم بايجاد مربع أي عدد , و تم اسنادها إلى المتغير square
val square = {num : Int -> num * num}
لنرى الآن كيف يمكننا تمريرها كمدخلات لدوال أخرى, لنفرض أن لدينا named function عادية تستقبل مدخلين و تعود بالقيمة Int أيضا:
المدخل الأول من النوع Int
والمدخل الثاني من النوع lambda function و التي تستقبل Int و تعود بـ Int :
fun findSquare (number: Int, operation: (Int) -> Int ): Int
{
//function body
}
الآن داخل الـ Function Body
فقط سننادي الـ lambda function التي تم تمريرها كمدخل , و القيمة العائدة منها نجعلها كـ return value
fun findSquare (number: Int, operation: (Int) -> Int ):Int
{
return operation(number)
}
ملاحظة: من الممارسات الجيدة أن تضع المدخلات من النوع lambda في الاخير بالنسبة للبارمترات أو المدخلات
الآن بقي شي أخير كيف يمكن مناداة الدالة findSquare كالتالي:
findSquare(6, square)
بحيث مررنا لها المدخل الأول من النوع Int مررت الرقم ٦, و الثاني من النوع Lambda و مررت لها اسمها و هو square
أخيرا أن الـ squareFunction تعود بقيمة من النوع Int, إذن لابد أن نضعها داخل printLn أو نسندها إلى متغير كالتالي:
val result = findSquare(6, square)
println(result). //output 36
البرنامج كامل :) :
val square = {num:Int -> num * num} //Lambda function
fun findSquare(number:Int, operation: (Int)-> Int): Int
return operation(number)
}
fun main()
{
println(findSquare(6,square))
}
أرجو أن يكون هذا الدرس حقق لك فهم الـ Lambda function
أرجو ترك تعليقك أسفل الدرس و امساعدة في نشر الدرس إذا وجدته مفيد لغيرك.
شكرا لوقتك :)
محتوى الدورة
الكلمات الدليلية
عن الدرس
1 إعجاب |
1 متابع |
0 مشاركة |
1636 مشاهدات |
منذ 4 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !