Menu
Coddy logo textTech

עבודה עם קבצים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 1 מתוך 57.

תוכניות אמיתיות מחולקות לכמה קבצים. כל קובצי .kt של תוכנית Kotlin מקומפלים יחד, ולכן אפשר להשתמש בפונקציה או במחלקה שהוגדרו בקובץ אחד בכל קובץ אחר באותה חבילה ללא ייבוא:

// Greeting.kt
fun greeting(name: String) = "Hello, $name!"

// Main.kt
fun main() {
    println(greeting("Ada"))
}

הרצת התוכנית הזאת מדפיסה Hello, Ada!: הפונקציה main שב־Main.kt קוראת לפונקציה שנמצאת ב־Greeting.kt.

קובץ Kotlin מכיל רק הצהרות: מחלקות, פונקציות ומאפיינים. פקודות כמו println(...) חייבות להופיע בתוך פונקציה. התוכנית מתחילה ב־fun main(), שעל פי המוסכמה נמצא בקובץ Main.kt:

// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// println("hi")            // שגיאה: פקודות חייבות להיות בתוך פונקציה

// Main.kt
fun main() {
    val name = readLine() ?: "friend"
    println(greeting(name))
}

הפריסה המקובלת היא מחלקה אחת בכל קובץ, ששמו כשם המחלקה: Dog.kt מכיל את Dog, ו-Account.kt מכיל את Account. באתגרים של יחידה זו, כותבים את הקוד בקבצים האלה, ו-Main.kt מכיל את קוד הקלט/פלט שסופק, שבדרך כלל אי אפשר לערוך. העורך מציג כל קובץ כלשונית.

Dog.kt        // class Dog(...) { ... }
Account.kt    // class Account { ... }
Main.kt       // fun main(): קוראת את הקלט ומדפיסה את התוצאות

גם הנראות חלה על קבצים. הצהרה ברמה העליונה שמסומנת private גלויה רק בתוך הקובץ שלה, בעוד שברירת המחדל, public, הופכת אותה לגלויה בכל קובץ:

// Secret.kt
private const val SALT = "x7"        // רק הקובץ הזה יכול לגשת אליו
fun hashed(s: String) = s + SALT

// Main.kt
fun main() {
    println(hashed("pw"))            // תקין: hashed היא פונקציה ציבורית
    // println(SALT)                 // שגיאה: SALT הוא פרטי ב-Secret.kt
}
challenge icon

אתגר

קל

לתוכנית יש שני קבצים. main בקובץ Main.kt קוראת שמות ומדפיסה את התוצאה של greeting(name). השלימו את greeting בקובץ Greeting.kt כך שתחזיר Hello, Ada! עבור השם Ada, או Hello, friend! כאשר השם ריק.

כתבו את הקוד שלכם בקובץ Greeting.kt. הקובץ Main.kt מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

fun main() {
    // קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
    val input = generateSequence(::readLine).toList()
    for (name in input) println(greeting(name))
}
quiz iconבחנו את עצמכם

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

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

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