Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المنشئات الأساسية

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 3 من 57.

تأخذ معظم أصناف Kotlin قيمها الابتدائية في المُنشئ الأساسي، ويُكتب بين قوسين بعد اسم الصنف. إن وضع val أو var أمام مُعامل يجعله خاصية في الوقت نفسه:

class Book(val title: String, var pages: Int)

داخل main:

val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)

الناتج:

Dune
420

المعامل الذي لا يحتوي على val أو var يكون متاحًا فقط أثناء إنشاء النسخة، مثلًا لحساب خاصية. لا يمكن إعادة إسناد الخصائص val بعد الإنشاء؛ بينما يمكن إعادة إسناد خصائص var:

class Temperature(celsius: Double) {
    val fahrenheit = celsius * 9 / 5 + 32
}

داخل main:

val t = Temperature(100.0)
println(t.fahrenheit)

الناتج:

212.0

يمكن أن تحتوي معاملات المُنشئ على قيم افتراضية، ويمكن تمريرها بالاسم، لذا يغطي مُنشئ واحد العديد من طرق إنشاء مثيل:

class Timer(val seconds: Int, val label: String = "timer")

داخل main:

val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")

الناتج:

egg 300
timer 30
tea 180

داخل جسم الفئة، تشير this إلى النسخة الحالية. وتكون مطلوبة عندما تكون لمعلمة إحدى الدوال الاسم نفسه الذي لخاصية:

class Player(var name: String) {
    fun rename(name: String) {
        this.name = name
    }
}

داخل main:

val p = Player("anon")
p.rename("Ada")
println(p.name)

الناتج:

Ada
challenge icon

التحدي

سهل

صرّح بالصنف Account باستخدام مُنشئ أساسي: owner للقراءة فقط وbalance قابل للتغيير، وتكون قيمته الافتراضية 0. أضف summary()، الذي يعيد Ada has 150.

يقرأ الكود المُزوَّد اسم المالك، وعندما يكون هناك سطر ثانٍ، يقرأ الرصيد الابتدائي. ينشئ الحساب مع الرصيد أو بدونه، ثم يطبع summary().

ضع الكود الخاص بك في Account.kt. يحتوي Main.kt على كود الإدخال/الإخراج المُزوَّد ولا يمكن تعديله.

جرّب بنفسك

fun main() {
    // كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
    val input = generateSequence(::readLine).toList()
    val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
    println(account.summary())
}
quiz iconاختبر نفسك

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

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin