العمل مع الملفات
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 1 من 57.
تُقسَّم البرامج الحقيقية إلى عدة ملفات. تُجمَّع جميع ملفات .kt في برنامج Kotlin معًا، لذلك يمكن استخدام دالة أو فئة مُعلنة في ملف واحد في أي ملف آخر من الحزمة نفسها دون استيراد:
// Greeting.kt
fun greeting(name: String) = "Hello, $name!"
// Main.kt
fun main() {
println(greeting("Ada"))
}تطبع beالبرنامج عند تشغيله 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 is public
// println(SALT) // خطأ: SALT is private in 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 والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin