العمل مع الملفات
جزء من قسم البرمجة كائنية التوجه في رحلة 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 والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin