Swift if let في Kotlin: العمل الآمن مع nullable في 2025

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Swift 'if let' في عالم Kotlin: كيف تتوقف عن الخوف من null وتبدأ الحياة

\n\n

إذا سبق لك الانتقال من Swift إلى Kotlin (أو العكس)، فمن المحتمل أنك واجهت السؤال: "كيف أفعل ذلك if let في Kotlin؟". هذا أحد أكثر الاستفسارات شيوعًا على Stack Overflow، وليس بدون سبب. كلتا اللغتين حديثتان، وكلتاهما استوعبتا أفضل ما في البرمجة الوظيفية، لكن التعامل مع الاختيارية (nullable) يختلف بينهما.

\n\n

في هذه المقالة، لن نعرض فقط كيفية محاكاة if let. سنقوم بتحليل أفضل الممارسات لعام 2025 التي ستجعل كود Kotlin الخاص بك ليس آمنًا فحسب، بل أنيقًا أيضًا. ستتعرف على متى تستخدم let، وكيف أن also أفضل من apply، ولماذا smart cast هو صديقك الجديد المفضل.

\n\n

شرح موجز: ما هو Swift 'if let'؟

\n\n

لمن لا يعرف: في Swift، if let هي بنية تتحقق في نفس الوقت مما إذا كان المتغير الاختياري يحتوي على قيمة، وإذا كان الأمر كذلك، تستخرجها إلى ثابت جديد.

\n\n
// Swift\nif let unwrappedName = optionalName {\n    print("مرحبًا، \\(unwrappedName)!")\n} else {\n    print("الاسم غير موجود")\n}
\n\n

هذا آمن وقابل للقراءة ولا يسمح باستخدام nil عن طريق الخطأ. في Kotlin، لا يوجد بناء جملة مدمج كهذا، ولكن هناك مجموعة كاملة من الأدوات التي تعمل بشكل أفضل. دعنا نلقي نظرة.

\n\n

الطريقة رقم 1: 'if' الكلاسيكي + smart cast

\n\n

أقرب نظير لـ if let في Kotlin هو if العادي مع التحقق من null. مترجم Kotlin ذكي بما يكفي لاعتبار المتغير غير nullable داخل كتلة if بعد التحقق. وهذا ما يسمى smart cast.

\n\n
// Kotlin — نظير Swift 'if let'\nval optionalName: String? = "أليس"\n\nif (optionalName != null) {\n    // هنا يتم تحويل optionalName تلقائيًا إلى String (وليس String?)\n    println("مرحبًا، $optionalName!")\n} else {\n    println("الاسم غير موجود")\n}
\n\n

لماذا هذا رائع؟ لا توجد متغيرات إضافية، ولا closures. الكود يُقرأ ككود أمرّي عادي. ومع ذلك، هناك فارق بسيط: smart cast يعمل فقط مع المتغيرات المحلية (val). إذا كان optionalName خاصية لفئة (var)، فلن يتمكن المترجم من ضمان عدم تغييرها بين التحقق والاستخدام.

\n\n

الطريقة رقم 2: دالة '.let' — ملك الأناقة

\n\n

دالة let هي أشهر "نظير if let" في Kotlin. تنفذ كتلة من الكود فقط إذا كان الكائن لا يساوي null. داخل الكتلة، يمكن الوصول إلى الكائن عبر it (أو يمكنك تعيين اسم خاص بك).

\n\n
// Swift if let → Kotlin .let\noptionalName?.let { name -> \n    println("مرحبًا، $name!")\n} ?: println("الاسم غير موجود")
\n\n

لاحظ ?: — هذا هو عامل Elvis. ينفذ الكود على اليمين إذا كان الجانب الأيسر null. مع let، يعطي هذا نظيرًا كاملاً لـ if-else.

\n\n

متى تستخدم let؟

\n
    \n
  • عندما تحتاج إلى تنفيذ سلسلة من الإجراءات بقيمة غير nullable
  • \n
  • عند العمل مع سلاسل الاستدعاءات nullable (chaining)
  • \n
  • عندما تريد تقييد نطاق رؤية المتغير
  • \n
\n\n

مثال مع سلسلة استدعاءات:

\n\n
data class User(val name: String?, val email: String?)\n\nfun processUser(user: User?) {\n    user?.let { u ->\n        u.name?.let { n -> println("الاسم: $n") }\n        u.email?.let { e -> println("البريد الإلكتروني: $e") }\n    }\n}
\n\n

الطريقة رقم 3: '.also' للتأثيرات الجانبية

\n\n

دالة also تشبه let، لكنها تعيد الكائن نفسه، وليس نتيجة الـ lambda. هذا مفيد عندما تحتاج إلى فعل شيء مع الكائن (مثل التسجيل) ثم متابعة العمل معه.

\n\n<

المدونات

توصيات الكتب