Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

جزء من قسم البرمجة كائنية التوجه في رحلة 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")      // error: العبارات غير مسموح بها في المستوى الأعلى هنا

// 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