0Pricing
Swift Academy · درس

الدمج عند nil والعامل الثلاثي مع Optionals

استخدم ?? للقيم الافتراضية وسلسلة عوامل الدمج عند nil

الدمج عند nil والعامل الثلاثي مع Optionals درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مرحبًا

يوفر عامل الدمج مع nil `??` قيمة افتراضية عندما تكون القيمة الاختيارية nil. وعند دمجه مع العامل الثلاثي، يتيح معالجة القيم الاختيارية بصيغة موجزة وواضحة.

العامل ??

```swift let name: String? = nil let display = name ?? "Guest" print(display) // "Guest" let known: String? = "Alice" print(known ?? "Guest") // "Alice" ``` إذا لم تكن القيمة الاختيارية nil، تُستخدم قيمتها بعد إلغاء تغليفها. وإلا فتُستخدم القيمة الافتراضية.

التقييم قصير الدارة

لا يُقيَّم الطرف الأيمن من `??` إلا عندما يكون الطرف الأيسر nil: ```swift func expensiveDefault() -> String { print("Computing...") return "Default" } let val: String? = "Existing" let result = val ?? expensiveDefault() // expensiveDefault not called ```

تسلسل العامل ??

سلسِل عدة عوامل `??` لتجربة بدائل احتياطية متعددة: ```swift let primary: String? = nil let secondary: String? = nil let fallback = "Anonymous" let user = primary ?? secondary ?? fallback print(user) // "Anonymous" ``` يتوقف التقييم عند أول قيمة ليست nil.

?? مع الخصائص المحسوبة

```swift struct Config { var theme: String? var displayTheme: String { theme ?? "light" } } var c = Config() print(c.displayTheme) // "light" c.theme = "dark" print(c.displayTheme) // "dark" ``` هذا نمط واضح لتحديد قيمة افتراضية في الخصائص المحسوبة.

العامل الثلاثي مع القيم الاختيارية

يمكن للعامل الثلاثي `condition ? a : b` العمل مع عمليات التحقق من القيم الاختيارية: ```swift let score: Int? = 85 let label = score != nil ? "\(score!)" : "No score" ``` لكن استخدام `??` يكون عادةً أوضح: ```swift let label = score.map { "\($0)" } ?? "No score" ```

استخدام Optional.map للتحويل

حوّل القيمة المغلّفة داخل Optional دون إلغاء تغليفها: ```swift let maybeInt: Int? = 42 let maybeStr = maybeInt.map { "Value: \($0)" } // Optional("Value: 42") let nilInt: Int? = nil let nilStr = nilInt.map { "Value: \($0)" } // nil ```

flatMap لتسلسل القيم الاختيارية

استخدم `flatMap` عندما يعيد التحويل نفسه قيمة اختيارية: ```swift let str: String? = "123" let num = str.flatMap { Int($0) } // Optional(123) let bad: String? = "abc" let nil2 = bad.flatMap { Int($0) } // nil ```

عامل الإسناد ??= (غير مضمّن)

لا يتضمن Swift العامل `??=` مضمّنًا، لكن يمكنك محاكاته: ```swift var cache: [String: Int] = [:] // Assign only if nil: if cache["key"] == nil { cache["key"] = expensiveCompute() } // Or with a helper: func ??= (lhs: inout T?, rhs: @autoclosure () -> T) { if lhs == nil { lhs = rhs() } } ```

إرشادات قابلية القراءة

اختر الأداة المناسبة: • `??` — للقيم الافتراضية البسيطة • `if let` — عندما تحتاج إلى القيمة بعد إلغاء تغليفها في عدة عبارات • `guard let` — للتحقق من شرط مسبق ثم الخروج مبكرًا • `.map` / `.flatMap` — للتحويل دون إلغاء التغليف تجنب إلغاء التغليف القسري باستخدام `!` إلا إذا كان حدوث حالة nil مستحيلًا فعلًا.

تحقق سريع

ماذا تُعيد `optional ?? default` عندما تكون `optional` تساوي `nil`؟

مراجعة

أهم النقاط: • `a ?? b` — تُعيد قيمة `a` إذا لم تكن nil، وإلا تُعيد `b` • تتوقف عن التقييم مبكرًا: لا تُقيَّم `b` إلا عندما تكون `a` nil • يمكنك التسلسل: `a ?? b ?? c` • يحوّل `.map` القيمة المغلّفة، بينما يتعامل `.flatMap` مع التحويل الذي يُعيد Optional • فضّل `??` على العامل الثلاثي مع إلغاء التغليف القسري التالي: التسلسل الاختياري باستخدام `?.`

الأسئلة الشائعة

هل درس «الدمج عند nil والعامل الثلاثي مع Optionals» مجاني؟

نعم — نص درس «الدمج عند nil والعامل الثلاثي مع Optionals» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «الدمج عند nil والعامل الثلاثي مع Optionals»؟

استخدم ?? للقيم الافتراضية وسلسلة عوامل الدمج عند nil تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الدمج عند nil والعامل الثلاثي مع Optionals»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ربط if let وguard let
  2. الدمج عند nil والعامل الثلاثي مع Optionals
  3. العامل Optional Chaining ?.
  4. القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها
← العودة إلى Swift Academy