Menu
Coddy logo textTech

בנאים ראשיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Kotlin אונליין