مشخصات مقاله
-
641
-
0.0
-
2176
-
0
-
0
افزونه(Extension)ها در Kotlin
افزونه(Extension) در Kotlin
در این بخش میخواهیم به قابلیت جدید دیگری از Kotlin به نام افزونه بپردازیم. با استفاده از این قابلیت میتوانیم برخی از کارکردهای متد را حتی بدون وراثت یا اصلاح آنها، اضافه یا حذف کنیم. افزونهها بهصورت ایستا تجزیه میشوند. آنها در واقع کلاسهای موجود را اصلاح نمیکنند، بلکه تابعی را ایجاد میکنند که قابلیت فراخوانی دارد و میتوان با کمک عملیات نقطهای آن را فراخوانی کرد.
افزونهی تابع
در این نوع از افزونهها، Kotlin امکان تعریف یک متد را خارج از کلاس main فراهم میکند. در مثال زیر چگونگی پیادهسازی این افزونه در سطح تابع نشان داده شده است.
class Alien {
var skills: String = "null"
fun printMySkills() {
print(skills)
}
}
fun main(args: Array< String>) {
var a1 = Alien()
a1.skills = "JAVA"
//a1.printMySkills()
var a2 = Alien()
a2.skills = "SQL"
//a2.printMySkills()
var a3 = Alien()
a3.skills = a1.addMySkills(a2)
a3.printMySkills()
}
fun Alien.addMySkills(a:Alien):String{
var a4 = Alien()
a4.skills = this.skills + " " +a.skills
return a4.skills
}
در مثال بالا هیچ متدی به نام addMySkills() داخل کلاس Alien وجود ندارد. با این وجود ما همچنان در جایی خارج از این کلاس در حال پیادهسازی همین متد هستیم که این خود جادوی افزونهها محسوب میشود.
نتیجهی کد بالا را در زیر مشاهده میکنید.
JAVA SQL
افزونهی شئ
Kotlin جهت پیادهسازی عملکرد ایستای جاوا سازوکار دیگری را نیز فراهم میکند. با استفاده از واژهی کلیدی companion object میتوان به این سازوکار رسید. با استفاده از این قابلیت میتوانیم یکی از اشیاء کلاسی را داخل یک متد فاکتوری ایجاد کنیم و پس از آن این متد را با اشاره به اسم کلاس فراخوانی کنیم. در مثال زیر یک companion object ایجاد شده است.
fun main(args: Array< String>) {
println("Heyyy!!!"+A.show())
}
class A {
companion object {
fun show():String {
return("You are learning Kotlin from TutorialsPoint.com")
}
}
}
نتیجهی کد بالا در ادامه مشهود است.
Heyyy!!! You are learning Kotlin from TutorialsPoint.com
به نظر میآید مثال بالا در جاوا ایستا باشد، اما در زمان واقعی ما شئ را بهعنوان یک متغیر عضو از همین کلاس ایجاد میکنیم. به همین دلیل است که این شیء در زیر ویژگی افزونه نیز لحاظ شده است و میتوان بهعنوان جایگزین آن را بهصورت یک افزونهی شئ فراخوانی کرد. شما در واقع شیء کلاس یکسانی را گسترش میدهید تا از برخی از توابع عضو استفاده کنید.