English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Kotlin الأساسي

تحكم Kotlin في العملية

وظائف Kotlin

النصوص Kotlin

Kotlin موجه بالأ象

وظائف Kotlin

في هذا المقال، ستتعرف على الدوال. ما هي الدالة، بنيتها، وكيفية إنشاء دالة مستخدمة في Kotlin.

في البرمجة، هي مجموعة من الجمل التي تنفذ مهمة معينة.

تستخدم الوظائف لتحويل برامج كبيرة إلى قطع modular. على سبيل المثال، قد تحتاج إلى إنشاء دائرة وتلوينها بناءً على إدخال المستخدم. يمكنك إنشاء وظيفتين لحل هذه المشكلة:

  • وظيفة createCircle() - تستخدم لإنشاء الدائرة

  • وظيفة colorCircle() - تستخدم لتلوين الدائرة

تقسيم برنامج معقد إلى مكونات أصغر يجعل برنامجنا أكثر تنظيماً وسهولة في التعامل.

إضافةً إلى ذلك، يمنع التكرار ويجعل الكود قابلاً للإعادة الاستخدام.

نوع الوظيفة

هناك نوعان من الوظائف بناءً على ما إذا كانت الوظيفة مخصصة أو من مكتبة معيارية:

  • وظائف مكتبة Kotlin

  • الوظائف المخصصة

وظائف مكتبة Kotlin

الوظائف المعيارية هي الوظائف المدمجة في Kotlin التي يمكن استخدامها في أي وقت. على سبيل المثال،

  • print() هو وظيفة مكتبة، يمكن استخدامها لطباعة الرسائل إلى流出 المعياري (المراقب).

  • يعود sqrt() قيمة الجذر التربيعي للرقم (قيمة Double).

fun main(args: Array<String>) {
    var number = 5.5
    print("Result = ${Math.sqrt(number)}")
}

عند تشغيل هذا البرنامج، الناتج يكون:

Result = 2.345207879911715

هذاالمكتبة القياسية Kotlin، للاستعراض.

وظائف مخصصة

كما ذكرنا سابقًا، يمكنك إنشاء وظائف بنفسك. هذه الوظائف تُسمى الوظائف المخصصة.

كيفية إنشاء وظيفة مخصصة في Kotlin؟

قبل استخدام (استدعاء) الوظيفة، يجب أولاً إعدادها.

طريقة إعداد وظيفة في Kotlin كالتالي:

fun callMe() {
    // جسم الوظيفة
}

لإعداد وظيفة في Kotlin، استخدم كلمة المفتاح fun. ثم اسم الوظيفة (المعرف). هنا، اسم الوظيفة هو callMe.

في البرنامج المذكور أعلاه، تكون الأقواس فارغة. هذا يعني أن الوظيفة لا تقبل أي معلمات. ستعرف المزيد عن المعلمات في الجزء التالي من المقال.

الكود الموجود داخل الأقواس {} هو جسم الوظيفة.

كيف يتم استدعاء الوظيفة؟

يجب عليك تفعيل هذه الوظيفة لتشغيل الكود داخل الوظيفة. إليك كيفية القيام بذلك:

callme()

تُدعى هذه الجملة بوظيفة callMe() التي تم إعلانها مسبقًا.

مثال: برنامج وظيفة بسيط

fun callMe() {
    println("الطباعة من وظيفة callMe().")
    println("هذا رائع (ما زال يتم الطباعة من الداخل).")
}
fun main(args: Array<String>) {
    callMe()
    println("الطباعة الخارجية من وظيفة callMe().")
}

عند تشغيل هذا البرنامج، الناتج يكون:

الطباعة من وظيفة callMe().
هذا رائع (ما زال يتم الطباعة من الداخل).
الطباعة الخارجية من وظيفة callMe().

لا تقبل الوظيفة callMe() أي معلمات.

بالإضافة إلى ذلك، لا يعود أي قيمة من هذه الوظيفة (نوع العودة هو Unit).

دعونا نرى مثالاً آخر للدالة. تقبل الدالة معلمات وتعيد قيمة.

مثال: استخدم الدالة لجمع إثنين من الأرقام

fun addNumbers(n1: Double, n2: Double): Int {
    val sum = n1 + n2
    val sumInteger = sum.toInt()
    return sumInteger
}
fun main(args: Array<String>) {
    val number1 = 12.2
    val number2 = 3.4
    val result: Int
    result = addNumbers(number1, number2)
    println("result = $result")
}

عند تشغيل هذا البرنامج، الناتج يكون:

result = 15

كيف تعمل الدوال التي تحتوي على معلمات ونتائج العودة؟

في هذا السياق، يتم تقديم معلمتين من نوع Double، number1 وnumber2، إلى دالة addNumbers() أثناء استدعاء الدالة. تُسمى هذه المعلمات المعلمات الفعلية (أو المعلمات الفعلية).

result = addNumbers(number1, number2)

المعلمات n1 وn2 تستقبل المعلمات المقدمة (في تعريف الدالة). تُسمى هذه المعلمات المعلمات النمطية (أو المعلمات النمطية).

في Kotlin، تُفصل المعلمات بفواصل البينات. يجب أن تكون أنواع المعلمات النمطية مكتوبة بشكل صريح.

لنلاحظ، يجب أن تتطابق أنواع المعلمات الفعلية وأنواع المعلمات النمطية، أي أن نوع المعلمات الفعلية الأولى يجب أن يتطابق مع نوع المعلمات النمطية الأولى. يجب أن يتطابق نوع المعلمات الفعلية الثانية مع نوع المعلمات النمطية الثانية، وهكذا.

في هذا السياق،

return sumInteger

هي جملة return. تؤدي هذه الكود إلى إنهاء دالة addNumbers()، والتحكم في البرنامج ينتقل إلى دالة main().

في البرنامج، يتم استخراج sumInteger من الدالة addNumbers(). تم تخصيص هذه القيمة للاسم result.

لنلاحظ،

  • sumInteger وresult كلاهما من نوع Int.

  • يحدد نوع العودة للدالة في تعريف الدالة.

    //نوع العودة Int
    fun addNumbers(n1: Double, n2: Double): Int {
        ... .. ...
    }

إذا لم يعد الدالة أي قيمة، يكون نوع العودة Unit. إذا كان نوع العودة Int، يمكن تحديد نوع العودة في تعريف الدالة.

مثال: استخدم الدالة لعرض الاسم

fun main(args: Array<String>) {
    println(getName("John", "Doe"))
}
fun getName(firstName: String, lastName: String): String = "$firstName $lastName"

عند تشغيل هذا البرنامج، الناتج يكون:

John Doe

في هذا السياق، تقبل الدالة getName() اثنين من المعلمات من نوع String وتعيد String.

إذا كان يعود الدالة إلى تعبير واحد (مثل المثال السابق)، يمكن التغاضي عن الأقواس الكاملة {} في جسم الدالة، وأيضاً تحديد الجسم بعد رمز =.

في هذه الحالة، يمكن أن يكون الإعلان الصريح عن نوع العودة اختياريًا، لأن نوع العودة يمكن أن يتم استنتاجه من قبل الماكينات. في المثال أعلاه، يمكنك استبدال

fun getName(firstName: String, lastName: String): String = "$firstName $lastName"

المثل:

fun getName(firstName: String, lastName: String) = "$firstName $lastName"

هذا المقال هو مختصر عن وظائف Kotlin.