الفرق بين المراجعتين لصفحة: «Kotlin/type aliases»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التسمية البديلة للأنواع (Type aliases) في لغة Kotlin}}</noinclude> تدعم لغة Kotlin ميّزة التسمية...' |
ط تعديل مصطلح متحول |
||
سطر 18: | سطر 18: | ||
typealias AInner = A.Inner | typealias AInner = A.Inner | ||
typealias BInner = B.Inner | typealias BInner = B.Inner | ||
</syntaxhighlight>إذ لا تٌنشِئ التسمية نوعًا جديدًا بل هي مُجرَّد تسميةٍ لنفس النوع ضمنيًا، فعند كتابة العبارة <code>typealias Predicate<T></code> مثلًا واستخدام <code>Predicate<Int></code> في الشيفرة فإن المُترجِم يُوسِّعها إلى الصيغة <code>(Int) -> Boolean</code> وأصبح ممكنًا بذلك تمريرُ | </syntaxhighlight>إذ لا تٌنشِئ التسمية نوعًا جديدًا بل هي مُجرَّد تسميةٍ لنفس النوع ضمنيًا، فعند كتابة العبارة <code>typealias Predicate<T></code> مثلًا واستخدام <code>Predicate<Int></code> في الشيفرة فإن المُترجِم يُوسِّعها إلى الصيغة <code>(Int) -> Boolean</code> وأصبح ممكنًا بذلك تمريرُ متغيِّرٍ من النوع الذي خصَّصتَه بنفسك حيثما يُستخدَم النوع الأصليّ للدالة والعكس صحيح، مثل:<syntaxhighlight lang="kotlin"> | ||
typealias Predicate<T> = (T) -> Boolean | typealias Predicate<T> = (T) -> Boolean | ||
المراجعة الحالية بتاريخ 18:00، 4 يوليو 2018
تدعم لغة Kotlin ميّزة التسمية البديلة للأنواع الموجودة للبيانات، وخاصّة إن كان اسم النوع طويلًا فيُستعاض عنه باسمٍ أقصرٍ ويُستخدَم الاسم الجديد في كتابة الشيفرات؛ فمن المفيد مثلًا تسمية الأنواع المُعمّمة (generics) بأسماء أقصرٍ، مثل الشيفرة الآتية المُستخدَمة لتسمية أنواع المجموعات (collections):
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>
وبالإمكان أيضًا تسمية الأنواع المختلفة للدوال، مثل:
typealias MyHandler = (Int, String, Any) -> Unit
typealias Predicate<T> = (T) -> Boolean
وكذلك الأمر بالنسبة للأصناف الداخليّة (inner classes) والمتداخلة (nested classes)، مثل:
class A {
inner class Inner
}
class B {
inner class Inner
}
typealias AInner = A.Inner
typealias BInner = B.Inner
إذ لا تٌنشِئ التسمية نوعًا جديدًا بل هي مُجرَّد تسميةٍ لنفس النوع ضمنيًا، فعند كتابة العبارة typealias Predicate<T>
مثلًا واستخدام Predicate<Int>
في الشيفرة فإن المُترجِم يُوسِّعها إلى الصيغة (Int) -> Boolean
وأصبح ممكنًا بذلك تمريرُ متغيِّرٍ من النوع الذي خصَّصتَه بنفسك حيثما يُستخدَم النوع الأصليّ للدالة والعكس صحيح، مثل:
typealias Predicate<T> = (T) -> Boolean
fun foo(p: Predicate<Int>) = p(42)
fun main(args: Array<String>) {
val f: (Int) -> Boolean = { it > 0 }
println(foo(f)) // "true" ستظهر
val p: Predicate<Int> = { it > 0 }
println(listOf(1, -2).filter(p)) // "[1]" ستظهر
}