الفرق بين المراجعتين ل"Kotlin/idioms"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(تعديل مصطلح خاطئ)
(مراجعة)
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:التعابير الاصطلاحيّة في لغة Kotlin}}</noinclude>
+
<noinclude>{{DISPLAYTITLE:التعابير الاصطلاحية (Idioms) في لغة Kotlin}}</noinclude>
تعرِض هذه الصفحة مجموعةً من التعابير الاصطلاحيّة المتعدِّدة والمستخدَمة بكثرةٍ في لغة Kotlin، وإن وُجد اصطلاحٌ غير مذكورٍ فيمكنك تعديل هذه الصفحة لإضافته.
+
تعرِض هذه الصفحة عددًا من التعابير الاصطلاحيّة المستخدَمة بكثرةٍ في لغة [[Kotlin]]، ولأيّ اصطلاحٍ جديدٍ لم يُذكَر فيمكنك [https://wiki.hsoub.com/index.php?title=Kotlin/idioms&veaction=edit تعديل هذه الصفحة] لإضافته.
== إنشاء كائنات نقل البيانات DTO (كائنات POJO/POCO) ==
+
 
 +
= إنشاء كائنات نقل البيانات DTO:‏ Data Transfer Objects (الكائنات POJO/POCO) =
 
ليكن الصنف (class) الآتي باسم <code>Customer</code>:<syntaxhighlight lang="kotlin">
 
ليكن الصنف (class) الآتي باسم <code>Customer</code>:<syntaxhighlight lang="kotlin">
 
data class Customer(val name: String, val email: String)
 
data class Customer(val name: String, val email: String)
</syntaxhighlight>وله التوابع الوظيفية الآتية:
+
</syntaxhighlight>وله التوابع الوظيفيّة (functional methods) الآتية:
* توابع getter (وتوابع setter في حالة المتحولات <code>var</code>) لكافة الخاصّيّات (properties)
+
* توابع getter (وتوابع setter في حالة المتحولات من النوع <code>var</code>) لكافة الخاصّيّات (properties)
 
* <code>equals()‎</code>
 
* <code>equals()‎</code>
 
* <code>hashCode()‎</code>
 
* <code>hashCode()‎</code>
 
* <code>toString()‎</code>
 
* <code>toString()‎</code>
* <code>copy()</code>
+
* <code>copy()</code>
* <code>component1()</code>‎ و <code>component2()</code>‎ ...إلخ. وذلك لكافة الخاصّيّات (properties) (راجع [[Kotlin/data classes|أصناف البيانات data classes]])
+
* <code>component1()</code>‎ و <code>component2()</code>‎ ...إلخ. وذلك لكافة الخاصّيّات (properties) في الصنف (راجع [[Kotlin/data classes|أصناف البيانات [data classes]]])
  
== تحديد القيم الافتراضيّة لمتحوِّلات الدوال (function parameters) ==
+
== تحديد القيم الافتراضية لمعاملات الدوال (Function Parameters) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun foo(a: Int = 0, b: String = "") { ... }
 
fun foo(a: Int = 0, b: String = "") { ... }
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/functions|الدوال (functions)]].
  
== ترشيح عناصر القائمة (filter) ==
+
== ترشيح (Filter) عناصر القائمة ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val positives = list.filter { x -> x > 0 }
 
val positives = list.filter { x -> x > 0 }
سطر 24: سطر 25:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== ملء سلسلةٍ نصيَّة (string interpolation) ==
+
== ملء سلسلة نصية (String Interpolation) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
println("Name $name")
 
println("Name $name")
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/basic types|السلاسل النصيّة (strings)]].
  
== التحقُّق من القيمة باستخدام when ==
+
== التحقق من القيمة باستخدام تعبير when ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
when (x) {
 
when (x) {
    is Foo -> ...
+
   is Foo -> ...
    is Bar -> ...
+
   is Bar -> ...
    else  -> ...
+
   else   -> ...
 
}
 
}
</syntaxhighlight>
 
  
== المرور بعناصر map أو قائمة من الثنائيات (pairs) ==
+
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/control flow|تعبير <code>when</code>.]]
 +
 
 +
== المرور بعناصر كائن Map أو قائمة من الثنائيات (Pairs) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
for ((k, v) in map) { println("$k -> $v") }
 
for ((k, v) in map) { println("$k -> $v") }
 
</syntaxhighlight>مهما كانت k أو v.
 
</syntaxhighlight>مهما كانت k أو v.
  
== استخدام المجالات (ranges) ==
+
== استخدام المجالات (Ranges) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
for (i in 1..100)       { ... } // المجال مغلق ويتضمن 100 قيمة  
+
for (i in 1..100)       { ... } // المجال مغلق ويتضمن 100 قيمة
for (i in 1 until 100) { ... } // مجال نصف مفتوح ولا يشمل 100 قيمة  
+
for (i in 1 until 100)  { ... } // مجال نصف مفتوح ولا يشمل 100 قيمة
for (x in 2..10 step 2) { ... } // مجال بخطوة ثابتة 2
+
for (x in 2..10 step 2) { ... } // مجال بخطوة ثابتة بمقدار 2
for (x in 10 downTo 1) { ... } // مجال تنازلي
+
for (x in 10 downTo 1)  { ... } // مجال تنازلي
if (x in 1..10)       { ... } // قيمة المتحول هي إحدى القيم الواقعة في المجال من 1 حتى 10
+
if  (x in 1..10)        { ... } // قيمة المتحول تقع ة في المجال من 1 حتى 10
</syntaxhighlight>
+
 
 +
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/ranges|المجالات (ranges)]].
  
== قائمة للقراءة فقط ==
+
== قائمة القراءة فقط (Read-Only List) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val list = listOf("a", "b", "c")
 
val list = listOf("a", "b", "c")
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== map للقراءة فقط ==
+
== كائن Map للقراءة فقط ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
 
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== الوصول إلى map ==
+
== الوصول إلى كائن Map ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
println(map["key"])  
+
println(map["key"])
 
map["key"] = value
 
map["key"] = value
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== الخاصّيّة الكسولة (Lazy property) ==
+
== الخاصية الكسولة (Lazy Property) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val p: String by lazy {
 
val p: String by lazy {
    // عمليات على السلسلة النصيّة
+
   // عمليات على السلسلة النصيّة
 
}
 
}
</syntaxhighlight>
+
 
 +
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/delegated properties|الخاصيّات الكسولة (lazy properties)]].
  
 
== الدوال الإضافية (Extension Functions) ==
 
== الدوال الإضافية (Extension Functions) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
fun String.spaceToCamelCase() { ... }  
+
fun String.spaceToCamelCase() { ... }
 
"Convert this to camelcase".spaceToCamelCase()
 
"Convert this to camelcase".spaceToCamelCase()
</syntaxhighlight>
 
  
== إنشاء نمط singleton (المشترك) ==
+
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/extensions|الدوال الإضافيّة (extension functions)]].
 +
 
 +
== إنشاء نمط التصميم Singleton ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
object Resource {
 
object Resource {
    val name = "Name"
+
   val name = "Name"
 
}
 
}
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 92: سطر 103:
 
val files = File("Test").listFiles()
 
val files = File("Test").listFiles()
 
println(files?.size)
 
println(files?.size)
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 98: سطر 111:
 
val files = File("Test").listFiles()
 
val files = File("Test").listFiles()
 
println(files?.size ?: "empty")
 
println(files?.size ?: "empty")
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
سطر 104: سطر 119:
 
val values = ...
 
val values = ...
 
val email = values["email"] ?: throw IllegalStateException("Email is missing!")
 
val email = values["email"] ?: throw IllegalStateException("Email is missing!")
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== الحصول على العنصر الأول من مجموعة قد تكون خالية ==
+
== الحصول على العنصر الأول من مجموعة قد تكون فارغة ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val emails = ... // من الممكن أن تكون فارغة
 
val emails = ... // من الممكن أن تكون فارغة
 
val mainEmail = emails.firstOrNull() ?: ""
 
val mainEmail = emails.firstOrNull() ?: ""
</syntaxhighlight>
+
 
 +
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/collections|المجموعات (collections)]].
  
 
== تنفيذ if not null ==
 
== تنفيذ if not null ==
سطر 116: سطر 135:
 
val value = ...
 
val value = ...
 
value?.let {
 
value?.let {
    ... // سينفذ هذا الجزء إن لم تكن القيمة null
+
   ... // سينفذ هذا الجزء إن لم تكن القيمة null
 
}
 
}
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== تعيين map للقيم nullable إن لم تكن قيمتها null ==
+
== تعيين Map للقيم من النوع nullable إن لم تكن بقيمة <code>null</code> ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val value = ...
 
val value = ...
 +
 
val mapped = value?.let { transformValue(it) } ?: defaultValueIfValueIsNull
 
val mapped = value?.let { transformValue(it) } ?: defaultValueIfValueIsNull
</syntaxhighlight>
 
  
== أمر العودة (return) في تعليمة <code>when</code> ==
+
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/null safety|استخدام القيمة null وأمانها]].
 +
 
 +
== أمر العودة (<code>return</code>) في تعبير <code>when</code> ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun transform(color: String): Int {
 
fun transform(color: String): Int {
 
+
   return when (color) {
    return when (color) {
+
       "Red" -> 0
        "Red" -> 0
+
       "Green" -> 1
        "Green" -> 1
+
       "Blue" -> 2
        "Blue" -> 2
+
       else -> throw
        else -> throw  
 
 
IllegalArgumentException("Invalid color param value")
 
IllegalArgumentException("Invalid color param value")
    }
+
   }
 
}
 
}
  
  
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/returns|أمر العودة (<code>return</code>)]].
  
== تعبير <code>try/catch</code> ==
+
== تعبير <code>try</code>/<code>catch</code> ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun test() {
 
fun test() {
 +
   val result = try {
 +
       count()
 +
   } catch (e: ArithmeticException) {
 +
       throw IllegalStateException(e)
 +
   }
 +
   // العمل بالنتائج
 +
}
  
    val result = try {
 
        count()
 
    } catch (e: ArithmeticException) {
 
        throw IllegalStateException(e)
 
    }
 
 
    // العمل بالنتائج
 
 
}
 
  
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/exceptions|الاستثناءات (exceptions)]].
  
 
== تعبير <code>if</code> ==
 
== تعبير <code>if</code> ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun foo(param: Int) {
 
fun foo(param: Int) {
 +
   val result = if (param == 1) {
 +
       "one"
 +
   } else if (param == 2) {
 +
       "two"
 +
   } else {
 +
       "three"
 +
   }
 +
}
  
    val result = if (param == 1) {
 
        "one"
 
    } else if (param == 2) {
 
        "two"
 
    } else {
 
        "three"
 
    }
 
}
 
  
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/control flow|تعبير الشرط if]].
  
== استخدام الشكل البنائي للتوابع (methods) التي تعيد النوع Unit ==
+
== استخدام الشكل البنائي (Builder-Style) للتوابع (Methods) التي تعيد النوع <code>Unit</code> ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun arrayOfMinusOnes(size: Int): IntArray {
 
fun arrayOfMinusOnes(size: Int): IntArray {
    return IntArray(size).apply { fill(-1) }
+
   return IntArray(size).apply { fill(-1) }
 
}
 
}
  
سطر 182: سطر 203:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== الدالة بتعبير وحيد ==
+
== الدالة وحيدة التعبير (Single-Expression Functions) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
fun theAnswer() = 42
 
fun theAnswer() = 42
 
</syntaxhighlight>وهذا مماثل تمامًا للشكل:<syntaxhighlight lang="kotlin">
 
</syntaxhighlight>وهذا مماثل تمامًا للشكل:<syntaxhighlight lang="kotlin">
 
fun theAnswer(): Int {
 
fun theAnswer(): Int {
    return 42
+
   return 42
 
}
 
}
  
  
</syntaxhighlight>ويمكن أن تُدمَج مع تعابير اصطلاحية أخرى مما ينتج شيفرة أقصر مثل دمجها مع تعبير <code>when</code>:<syntaxhighlight lang="kotlin">
+
</syntaxhighlight>وقد تُدمَج مع تعابير اصطلاحيّة أخرى بهدف الحصول على شيفرة أقصر، مثل دمجها مع تعبير <code>when</code> بالشكل:<syntaxhighlight lang="kotlin">
 
fun transform(color: String): Int = when (color) {
 
fun transform(color: String): Int = when (color) {
    "Red" -> 0
+
   "Red" -> 0
    "Green" -> 1
+
   "Green" -> 1
    "Blue" -> 2
+
   "Blue" -> 2
    else -> throw  
+
   else -> throw
 
IllegalArgumentException("Invalid color param value")
 
IllegalArgumentException("Invalid color param value")
 
}
 
}
  
  
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/functions|الدوال (functions)]].
  
== استدعاء عدة توابع (methods) عبر الكائن (object) (باستخدام <code>with</code>) ==
+
== استدعاء عدة توابع (Methods) عبر الكائن (Object) (باستخدام <code>with</code>) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
class Turtle {
 
class Turtle {
 
+
   fun penDown()
    fun penDown()
+
   fun penUp()
    fun penUp()
+
   fun turn(degrees: Double)
    fun turn(degrees: Double)
+
   fun forward(pixels: Double)
    fun forward(pixels: Double)
 
 
}
 
}
 
 
val myTurtle = Turtle()
 
val myTurtle = Turtle()
 
 
with(myTurtle) { //لرسم مربع بمئة بكسل
 
with(myTurtle) { //لرسم مربع بمئة بكسل
    penDown()
+
   penDown()
    for(i in 1..4) {
+
   for(i in 1..4) {
        forward(100.0)
+
       forward(100.0)
        turn(90.0)
+
       turn(90.0)
    }
+
   }
    penUp()
+
   penUp()
 
}
 
}
  
سطر 227: سطر 245:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== تجربة Java 7 مع المصادر (resources) ==
+
== تجربة Java 7 مع المصادر (Resources) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val stream = Files.newInputStream(Paths.get("/some/file.txt"))
 
val stream = Files.newInputStream(Paths.get("/some/file.txt"))
 
stream.buffered().reader().use { reader ->
 
stream.buffered().reader().use { reader ->
    println(reader.readText())
+
   println(reader.readText())
 
}
 
}
 +
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== الشكل الملائم للدالة العامّة (generic) والتي تتطلَّب معلومات من نوع عامّ (generic) ==
+
== الشكل المناسب للدالة العامة (Generic) والتي تتطلب معلومات من النوع العام (Generic) ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
//  public final class Gson {
+
//  public final class Gson {
//     ...
+
//     ...
//     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
+
//     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
//     ...
+
//     ...
  
 
inline fun <reified T: Any> Gson.fromJson(json: JsonElement): T = this.fromJson(json, T::class.java)
 
inline fun <reified T: Any> Gson.fromJson(json: JsonElement): T = this.fromJson(json, T::class.java)
  
  
</syntaxhighlight>
+
</syntaxhighlight>المزيد عن [[Kotlin/generics|الأنواع المُعمَّمة (generics)]].
  
== استخدام القيم المنطقيّة (boolean) والتي قد تكون فارغة (nullable) ==
+
== استخدام القيم المنطقية (Boolean) من النوع Nullable ==
 
<syntaxhighlight lang="kotlin">
 
<syntaxhighlight lang="kotlin">
 
val b: Boolean? = ...
 
val b: Boolean? = ...
 
if (b == true) {
 
if (b == true) {
    ...
+
   ...
 
} else {
 
} else {
    //false أو null قيمة المتحول إما  
+
   //false أو null قيمة المتحول إما  
 
}
 
}
</syntaxhighlight>
+
 
 +
 
 +
</syntaxhighlight>المزيد عن [[Kotlin/null safety|استخدام القيمة null وأمانها]].
  
 
== مصادر ==
 
== مصادر ==
* [https://kotlinlang.org/docs/reference/idioms.html صفحة التعابير الاصطلاحية في التوثيق الرسمي للغة Kotlin]
+
* [https://kotlinlang.org/docs/reference/idioms.html التعابير الاصطلاحيّة في التوثيق الرسميّ للغة Kotlin.]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin]]
 
[[تصنيف:Kotlin conventions]]
 
[[تصنيف:Kotlin conventions]]

المراجعة الحالية بتاريخ 09:22، 15 مايو 2018

تعرِض هذه الصفحة عددًا من التعابير الاصطلاحيّة المستخدَمة بكثرةٍ في لغة Kotlin، ولأيّ اصطلاحٍ جديدٍ لم يُذكَر فيمكنك تعديل هذه الصفحة لإضافته.

إنشاء كائنات نقل البيانات DTO:‏ Data Transfer Objects (الكائنات POJO/POCO)

ليكن الصنف (class) الآتي باسم Customer:

data class Customer(val name: String, val email: String)

وله التوابع الوظيفيّة (functional methods) الآتية:

  • توابع getter (وتوابع setter في حالة المتحولات من النوع var) لكافة الخاصّيّات (properties)
  • equals()‎
  • hashCode()‎
  • toString()‎
  • copy()‎
  • component1()‎ و component2()‎ ...إلخ. وذلك لكافة الخاصّيّات (properties) في الصنف (راجع أصناف البيانات [data classes])

تحديد القيم الافتراضية لمعاملات الدوال (Function Parameters)

fun foo(a: Int = 0, b: String = "") { ... }

المزيد عن الدوال (functions).

ترشيح (Filter) عناصر القائمة

val positives = list.filter { x -> x > 0 }

أو بشكلٍ أكثر اختصارًا:

val positives = list.filter { it > 0 }

ملء سلسلة نصية (String Interpolation)

println("Name $name")

المزيد عن السلاسل النصيّة (strings).

التحقق من القيمة باستخدام تعبير when

when (x) {
   is Foo -> ...
   is Bar -> ...
   else   -> ...
}

المزيد عن تعبير when.

المرور بعناصر كائن Map أو قائمة من الثنائيات (Pairs)

for ((k, v) in map) { println("$k -> $v") }

مهما كانت k أو v.

استخدام المجالات (Ranges)

for (i in 1..100)       { ... } // المجال مغلق ويتضمن 100 قيمة
for (i in 1 until 100)  { ... } // مجال نصف مفتوح ولا يشمل 100 قيمة
for (x in 2..10 step 2) { ... } // مجال بخطوة ثابتة بمقدار 2
for (x in 10 downTo 1)  { ... } // مجال تنازلي
if  (x in 1..10)        { ... } // قيمة المتحول تقع ة في المجال من 1 حتى 10

المزيد عن المجالات (ranges).

قائمة القراءة فقط (Read-Only List)

val list = listOf("a", "b", "c")

كائن Map للقراءة فقط

val map = mapOf("a" to 1, "b" to 2, "c" to 3)

الوصول إلى كائن Map

println(map["key"])
map["key"] = value

الخاصية الكسولة (Lazy Property)

val p: String by lazy {
   // عمليات على السلسلة النصيّة
}

المزيد عن الخاصيّات الكسولة (lazy properties).

الدوال الإضافية (Extension Functions)

fun String.spaceToCamelCase() { ... }
"Convert this to camelcase".spaceToCamelCase()

المزيد عن الدوال الإضافيّة (extension functions).

إنشاء نمط التصميم Singleton

object Resource {
   val name = "Name"
}

شيفرة if not null المختصرة

val files = File("Test").listFiles()
println(files?.size)

شيفرة if not و else المختصرة

val files = File("Test").listFiles()
println(files?.size ?: "empty")

تنفيذ التعليمة if null

val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is missing!")

الحصول على العنصر الأول من مجموعة قد تكون فارغة

val emails = ... // من الممكن أن تكون فارغة
val mainEmail = emails.firstOrNull() ?: ""

المزيد عن المجموعات (collections).

تنفيذ if not null

val value = ...
value?.let {
   ... // سينفذ هذا الجزء إن لم تكن القيمة null
}

تعيين Map للقيم من النوع nullable إن لم تكن بقيمة null

val value = ...

val mapped = value?.let { transformValue(it) } ?: defaultValueIfValueIsNull

المزيد عن استخدام القيمة null وأمانها.

أمر العودة (return) في تعبير when

fun transform(color: String): Int {
   return when (color) {
       "Red" -> 0
       "Green" -> 1
       "Blue" -> 2
       else -> throw
IllegalArgumentException("Invalid color param value")
   }
}

المزيد عن أمر العودة (return).

تعبير try/catch

fun test() {
   val result = try {
       count()
   } catch (e: ArithmeticException) {
       throw IllegalStateException(e)
   }
   // العمل بالنتائج
}

المزيد عن الاستثناءات (exceptions).

تعبير if

fun foo(param: Int) {
   val result = if (param == 1) {
       "one"
   } else if (param == 2) {
       "two"
   } else {
       "three"
   }
}

المزيد عن تعبير الشرط if.

استخدام الشكل البنائي (Builder-Style) للتوابع (Methods) التي تعيد النوع Unit

fun arrayOfMinusOnes(size: Int): IntArray {
   return IntArray(size).apply { fill(-1) }
}

الدالة وحيدة التعبير (Single-Expression Functions)

fun theAnswer() = 42

وهذا مماثل تمامًا للشكل:

fun theAnswer(): Int {
   return 42
}

وقد تُدمَج مع تعابير اصطلاحيّة أخرى بهدف الحصول على شيفرة أقصر، مثل دمجها مع تعبير when بالشكل:

fun transform(color: String): Int = when (color) {
   "Red" -> 0
   "Green" -> 1
   "Blue" -> 2
   else -> throw
IllegalArgumentException("Invalid color param value")
}

المزيد عن الدوال (functions).

استدعاء عدة توابع (Methods) عبر الكائن (Object) (باستخدام with)

class Turtle {
   fun penDown()
   fun penUp()
   fun turn(degrees: Double)
   fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { //لرسم مربع بمئة بكسل
   penDown()
   for(i in 1..4) {
       forward(100.0)
       turn(90.0)
   }
   penUp()
}

تجربة Java 7 مع المصادر (Resources)

val stream = Files.newInputStream(Paths.get("/some/file.txt"))
stream.buffered().reader().use { reader ->
   println(reader.readText())
}

الشكل المناسب للدالة العامة (Generic) والتي تتطلب معلومات من النوع العام (Generic)

//  public final class Gson {
//     ...
//     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
//     ...

inline fun <reified T: Any> Gson.fromJson(json: JsonElement): T = this.fromJson(json, T::class.java)

المزيد عن الأنواع المُعمَّمة (generics).

استخدام القيم المنطقية (Boolean) من النوع Nullable

val b: Boolean? = ...
if (b == true) {
   ...
} else {
   //false أو null قيمة المتحول إما 
}

المزيد عن استخدام القيمة null وأمانها.

مصادر