Menu
CoddyTech

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

جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 1 من 57.

تُقسَّم البرامج الحقيقية إلى عدة ملفات. في Swift، يُجمَّع كل ملف .swift في التطبيق معًا ضمن وحدة، لذا يمكن استخدام دالة أو نوع مُعرَّف في أحد الملفات في أي ملف آخر دون استيراد:

// Greeting.swift
func greeting(for name: String) -> String {
    "Hello, \(name)!"
}

// main.swift
print(greeting(for: "Ada"))

يؤدي تشغيل هذا البرنامج إلى طباعة Hello, Ada!: يستدعي main.swift الدالة الموجودة في Greeting.swift.

يمكن أن يحتوي ملف واحد فقط على تعليمات المستوى الأعلى، وهي التعليمات البرمجية التي تعمل بمفردها خارج أي دالة أو نوع. هذا الملف هو main.swift، وهو المكان الذي يبدأ فيه البرنامج. أما الملفات الأخرى فتحتوي على تصريحات فقط:

// Greeting.swift
func greeting(for name: String) -> String { "Hello, \(name)!" }
// print("hi")      // خطأ: لا يُسمح بالتعليمات على المستوى الأعلى هنا

// main.swift
let name = readLine() ?? "friend"   // لا توجد مشكلة في وجود شيفرة على المستوى الأعلى في main.swift
print(greeting(for: name))

التنسيق المعتاد هو ملف واحد لكل نوع، ويُسمّى الملف باسم النوع: يحتوي Dog.swift على Dog، ويحتوي Account.swift على Account. في تحديات هذا القسم، تضع شيفرتك في تلك الملفات، ويحتوي main.swift على شيفرة الإدخال والإخراج المُقدَّمة، التي لا يمكنك عادةً تعديلها. يعرض المحرر كل ملف في علامة تبويب.

Dog.swift        // class Dog { ... }
Account.swift    // struct Account { ... }
main.swift       // يقرأ المدخلات ويطبع النتائج

يسري التحكم في الوصول على الملفات أيضًا. تخفي private وfileprivate التصريح عن الملفات الأخرى، بينما يجعل النطاق الافتراضي، internal، التصريح مرئيًا في كل ملف ضمن الوحدة:

// Secret.swift
fileprivate let salt = "x7"          // هذا الملف وحده يمكنه الوصول إليه
func hashed(_ s: String) -> String { s + salt }

// main.swift
print(hashed("pw"))                  // لا مشكلة: hashed له مستوى وصول internal
// print(salt)                       // خطأ: salt له مستوى وصول fileprivate
challenge icon

التحدي

سهل

يتكوّن البرنامج من ملفين. يقرأ main.swift اسمًا ويطبع نتيجة greeting(for:). أكمل greeting(for:) في Greeting.swift ليُرجع Hello, Ada! للاسم Ada، أو Hello, friend! عندما يكون الاسم فارغًا.

ضع التعليمات البرمجية الخاصة بك في Greeting.swift. يحتوي main.swift على تعليمات الإدخال/الإخراج المقدَّمة، ولا يمكن تعديله.

جرّب بنفسك

// كود الإدخال والإخراج المقدَّم: أبقه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
for name in input { print(greeting(for: name)) }
quiz iconاختبر نفسك

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

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

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