Menu
CoddyTech

العمل مع الملفات

جزء من قسم البرمجة كائنية التوجه في رحلة 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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin