في هذا الدرس سوف نناقش دالة Inline في Kotlin باستخدام الكلمة المحجوزة Inline . تساعدنا دوال Inline على توفير الذاكرة في وقت التشغيل وبالتالي زيادة أداء تطبيقنا.
ناقشنا في الدروس السابقة تعبيرات lambda ودوال higher-order. لنأخذ نفس المثال السابق:
fun higherOrderFunction(functionName: (name: String)->Unit, name: String){
println("In higher order function")
println("Calling received function...")
functionName(name)
}
fun main() {
higherOrderFunction({ name: String ->
println("Inside the lambda function")
println("Say hello to $name")
}, "Ninja")
}
في IntelliJ ، يمكننا إنشاء الرمز الثانوي لبرنامج Kotlin الخاص بنا. لذلك اذهب إلى Tools> Kotlin> Show Kotlin Bytecode. يمكننا فك هذا الرمز الثانوي وإنشاء كود Java المكافئ.سنلاحظ أنه بالنسبة لتعبير lambda ، يتم إنشاء كائن دالة جديد. لكن هذا ليس ما أردناه.
كل دالة ذات higher-order ستنشئ كائنًا جديدًا وتخصص ذاكرة له. وهذا سوف يسبب في زيادة وقت التشغيل. للتغلب على هذه المشكلة ، نستخدم الدوال Inline .
دالة Inline كوتلين
لتجنب إنشاء كائن جديد لكل دالة ذات higher-order ، يمكننا استخدام الكلمات الأساسية Inline . سوف يساعدنا هذا على زيادة أداء الكود. الكلمة المحجوزة Inline، بدلاً من ان تنشاء كائن جديد للدالة ذات higher-order ، تقوم بنسخ الكود الموجود داخل دالة Inline إلى المكان الذي يتم استدعاؤها.
تتم إضافة الكلمة المحجوزة Inline قبل اسم الدالة
inline fun higherOrderFunction(functionName: (name: String)->Unit, name: String){
println("In higher order function")
println("Calling received function...")
functionName(name)
}
fun main() {
higherOrderFunction({ name: String ->
println("Inside lambda function")
println("Say hello to $name")
}, "Ninja")
}
إذا أضفنا الكلمة المفتاحية Inline قبل دالة عادية ، فلن يؤدي ذلك إلى أي تغيير في الأداء. حتى Intellij سيقترح إزالته.ضع في اعتبارك أنه يجب استخدام الكلمة الأساسية Inline فقط عندما تكون دالة higher-order قصيرة. إذا كانت دالة higher-order تحتوي على الكثير من التعليمات البرمجية ، فسيكون الرمز الذي تم إنشاؤه طويلاً حقًا.
الخلاصة
ناقشنا في هذاالدرس دوال الـ Inline . يصعب فهمها قليلاً في البداية. النقطة الوحيدة لإضافة كلمة Inline هي تحسين الأداء.