function references
السلام عليكم و رحمة الله
في الدرس السابق تكلمت عن دوال الـ lambda و كيف يمكننا تمريرها كمدخلات لدوال أخرى, كما يمكن تخزينها و اسنادها إلى متغيرات.
المثال الذي تم استخدامه في الدرس السابق:
val square = {num:Int -> num * num}. //lambda
fun findSquare(number:Int, operation: (Int)-> Int): Int
{
return operation(number)
}
println(findSquare(6,square))
سنرى في هذا الدرس كيف يمكننا تطبيق نفس المفهوم على الدوال العادية التي تحتوي على اسم (named functions)
من أحد مميزات لغة الكوتلن هو:
إمكانية اسناد الدوال إلى متغيرات Literal Function , و أيضا استخدامها كمدخلات لدوال أخرى كما هو الحال مع الـ lambda , و هذه الميزة للدوال تسمى Kotlin support functions as a type.
في هذا الدرس سنتعلم..
* كيفية اسناد الدوال إلى متغيرات
* كيفية تمريرها كمدخلات arguments لدوال أخرى
** إسناد الدوال العادية إلى متغيرات :
ننشيء دالة عادية, تستقبل عددين (Int, Int) و تعود بالمجموع لهما Int :
fun sum(x: Int, y: Int) : Int = x + y
الآن لنرى كيف يمكن اسنادها إلى متغير :
val add: (Int, Int) : Int = ::sum
فقط قبل اسم الدالة نكتب:
Function Reference و هي عبارة عن نقطتين رأسية مكررة مرتين قبل اسم الدالة المراد اسنادها إلى متغير.
** تمرير الدوال العادية كمدخلات لدوال أخرى:
أولا ننشيء دالة عادية بدلا من lambda, تستقبل عددين و تعود بالمجموع لهما.
fun sum(x: Int, y: Int) : Int = x + y
ثم ننشي دالة بسيطة, تستقبل ٣ مدخلات بالترتيب:
المدخل الأول: Int
المدخل الثاني: Int
المدخل الثالث: دالة تستقبل عددين Int و تعود بـ Int
fun findSum(number1: Int, number2: Int, operation: (Int, Int)-> Int): Int
{
return operation(number1, number2)
}
الآن كيف سيتم تمرير الدالة sum كمدخل إلى الدالة findSum, لو طبقنا نفس طريقة الـ lambda فاننا سنكتب:
findSum(5, 6, sum) //WRONG
السطر السابق يحتوي على خطأ بحيث أننا مررنا الدالة sum بنفس طريقة تمرير الـ lambda و هنا خطأ, لأن الـ sum ليست lambda
مالحل؟ كيف يمكنني تمرير دالة عادية إلى دالة اخرى كمدخل ؟؟
الاجابة هي :
استخدام : Function Reference :
و هي عبارة عن نقطتين رأسية مكررة مرتين في كل مرة نقوم فيها بتمرير اسم الدالة على أنها مدخل (argument)
و بالتالي يصبح مناداة الدالة findSum و تمرير الدالة sum لها بشكل صحيح كالتالي:
println( findSum(5, 6, ::sum) )
//output
11
اذا كانت أول مرة تتعلم فيها الFunction reference قد يكون الأمر غريبا نوعا ما, لكن مع الوقت ستعتاد على الأمر.
لازال هناك الكثير من الاستخدامات العملية لها ستظهر في الدروس القادمة.
تعلمنا في هذا الدرس بشكل بسيط كيف يمكننا اسناد الدوال إلى متغيرات أو كيف يمكن تمريرها كمدخلات . الفرق بينها و بين الـ Lambda أننا نستخدم هنا الـ :: قبل اسم الدالة المراد اسنادها أو تمريرها ..
أرجو أن يكون هذا الدرس مفيد لك.
و السلام عليكم
محتوى الدورة
الكلمات الدليلية
عن الدرس
0 إعجاب |
1 متابع |
0 مشاركة |
950 مشاهدات |
منذ 4 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !