العمل مع الملفات
جزء من قسم البرمجة كائنية التوجه في رحلة 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التحدي
سهليتكوّن البرنامج من ملفين. يقرأ 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)) }
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift