Kotlin: Extension function

واحده من مميزات كوتلن الا وهي Extension function فتعالوا نعرف ايه هي؟
إضافة من كوتلن تتيح إضافة دالة او متغير داخل كلاس اخر دون التعديل في الكلاس ده وده بينفع مع المكتبات الخارجية اللى بيكون ملف المكتبة read-only

وهناك طرق اخري مثل Decorator pattern لكن هما حصلنا على الميزة دي دون الحاجة الى تطبيق الباترن

ازاي؟
الاول بنحدد ال reveiver الا وهو ال class اللى عايزين نزود عليه الداله بتاعتنا
مثلا هنا هنعمل داله اضافية لكل عنصر من نوع ال Int وترجع هل هو زوجي او فردي
this تمثل قيمة ال reveiver

fun Int.isEven() = this % 2 == 0 

نستخدمها ازاي ؟

val is5Even = 5.isEven() 

وهنا هتقدر تستخد الدالة على أي عنصر من نوع Int, هنا ال this قيمتها 5

بعض الاستخدامات المفيدة

fun ImageView.load(url:String ,placeHolder:Int = R.drawable.placeholder  ,radCorner:Int = 1){
    Glide.with(this.context)
        .load(url)
        .placeholder(placeHolder)
        .transform(RoundedCorners(radCorner))
        .into(this)
}

في المثال السابق نقدر لو معانا imageview نعمل load لاي صورة من لينك وكمان نقدر نحدد ال placeholder وكمان

ممكن نضيف RoundedCorners وممكن طبعا نعمل تعديل واضافة اي اضافات وده بيسهل التعامل مع الصور ويمكن التعديل عليها من مكان واحد

بدل ما اغير الكود في كذا مكان وكمان لو حبينا نغير ال glide الى اي مكتبة تانيه هنغير سطر واحد والكود يستمر زي ما هو.

fun Boolean.gotViewVisiblity(isGone: Boolean = false): Int {
    return when (this) {
        true -> View.VISIBLE
        else -> if (isGone) View.GONE else View.INVISIBLE
    }
}

في المثال اللى فوق بيعمل تغيير لل view visbility من مكان واحد ونقدر نطبقه على اي view
هنا في حالة true بيتم اظهار العنصر
وغير ذلك بيكون حالتين اما gone or invisble


لو استخدمتها قبل كده ممكن تشاركنا ليستفاد الجميع

هنا ده مصدر مجمع عدد منهم
http://kotlinextensions.com/?fbclid=IwAR0teuKXJo2wyPSfWw8w6BcbrbBs-1NO-U-0FpwUX3qdD0iMMf9peKVVdjg

الكاتب: Mahmoud Mabrok

مطور تطبيقات الاندرويد بشركة Inovaeg LLC

اترك ردا