עבודה עם קבצים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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
}אתגר
קללתוכנית יש שני קבצים. 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))
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותבנאים ראשייםבלוקי init ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין