معامل دمج Nil
جزء من قسم الأساسيات في رحلة Swift على Coddy — الدرس 14 من 86.
أحياناً تريد فقط توفير قيمة افتراضية عندما يكون الاختياري (optional) هو nil، دون كتابة عدة أسطر من الكود. يقوم عامل دمج القيم الفارغة (nil coalescing operator) في Swift (??) بذلك تماماً — فهو يقوم بفك تغليف الاختياري إذا كان يحتوي على قيمة، أو يعيد قيمة افتراضية إذا كان nil.
let nickname: String? = nil
let displayName = nickname ?? "Guest"
print(displayName) // Guestبما أن nickname هو nil، فإن العامل يرجع "Guest" بدلاً من ذلك. إذا كانت هناك قيمة لـ nickname، فسيتم استخدام تلك القيمة.
let username: String? = "SwiftCoder"
let greeting = username ?? "Anonymous"
print(greeting) // SwiftCoderيعد عامل دمج القيم الفارغة (nil coalescing operator) مثالياً للأسطر البرمجية المفردة التي تحتاج فيها إلى قيمة احتياطية. إنه أكثر بساطة من كتابة عبارة if let عندما تريد ببساطة استبدال nil بقيمة افتراضية. النتيجة دائماً ما تكون قيمة غير اختيارية، لذا يمكنك استخدامها مباشرة دون الحاجة إلى مزيد من فك التغليف (unwrapping).
التحدي
سهلاكتب دالة getDisplayName تأخذ username اختيارياً و defaultName، ثم تعيد اسم العرض المناسب باستخدام عامل دمج القيم الفارغة (nil coalescing operator).
إذا كان اسم المستخدم فارغاً (يتم تمثيله بسلسلة نصية فارغة "")، فقم بمعاملته كـ nil وأعد الاسم الافتراضي. بخلاف ذلك، أعد اسم المستخدم.
المعاملات:
username(String): اسم المستخدم (السلسلة النصية الفارغة تمثل nil)defaultName(String): الاسم الاحتياطي المراد استخدامه
القيمة المرجعة: اسم المستخدم إذا لم يكن فارغاً، وإلا defaultName.
تلميح: قم بتحويل اسم المستخدم إلى قيمة اختيارية (optional) داخل الدالة الخاصة بك — إذا كان فارغاً، اجعله nil. ثم استخدم ?? لتوفير القيمة الاحتياطية.
ورقة مرجعية
يقوم عامل دمج القيم الفارغة (nil coalescing operator) (??) بفك تغليف الاختياري (optional) إذا كان يحتوي على قيمة، أو إرجاع قيمة افتراضية إذا كان nil:
let nickname: String? = nil
let displayName = nickname ?? "Guest"
print(displayName) // Guestإذا كان الاختياري (optional) يحتوي على قيمة، يتم استخدام تلك القيمة بدلاً من ذلك:
let username: String? = "SwiftCoder"
let greeting = username ?? "Anonymous"
print(greeting) // SwiftCoderالنتيجة دائماً ما تكون قيمة غير اختيارية (non-optional)، مما يجعله أكثر بساطة من if let في حالات القيم البديلة البسيطة.
جرّب بنفسك
func getDisplayName(username: String, defaultName: String) -> String {
// اكتب الكود هنا
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمةالإسناد المركبمراجعة - عمليات رياضية بسيطةمعاملات المقارنة7أساسيات الإدخال والإخراج
دالة الطباعةتضمين النصوصإدخال ReadLineتحويل الأنواعمراجعة - حتى 120مراجعة - True أو False10الدوال
تعريف دالةالمعاملات والوسائطقيم الإرجاعتسميات الوسائطمراجعة - دالة Sigmaمراجعة - دالة Validationالقيم الافتراضية2المتغيرات
Let مقابل Varتوصيف الأنواع (Type Annotations)الأرقامStringBooleanقواعد التسميةمراجعة - تهيئة المتغيرات5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالثالمعامل الثلاثي (Ternary Operator)8حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على المدخلات3القيم الاختيارية (Optionals)
ما هي القيم الاختياريةفك القيم باستخدام If Letاستخدام Guard Letمعامل دمج Nilمراجعة - فك القيم بأمان9حلقات التكرار
حلقة For-Inحلقة Whileحلقة Repeat-WhileBreakContinueمراجعة - المضروب (Factorial)النطاقات في حلقات التكرارالحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)