العامل الثلاثي في Kotlin: 5 أخطاء رئيسية يرتكبها المبتدئون

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

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

ابدأ الدورة

العامل الثلاثي في Kotlin: لماذا لا يوجد وكيف تتجنب الوقوع في المشاكل

\n\n

إذا كنت قد أتيت إلى Kotlin من Java أو C# أو JavaScript، فبالتأكيد تساءلت مرة واحدة على الأقل: "أين عامل الثلاثي المفضل لدي شرط ? قيمة1 : قيمة2؟". المفاجأة: لا يوجد في Kotlin. وهذا ليس خطأ، بل ميزة. قرر مطورو اللغة أن العامل الثلاثي التقليدي هو كيان زائد يعقد قراءة الكود فقط، خاصة عندما يكون هناك أكثر من شرطين متداخلين.

\n\n

لكن غياب العامل الثلاثي ليس مشكلة. يقدم Kotlin بدائل أكثر مرونة وأمانًا. ومع ذلك، يرتكب المبتدئون (وحتى المطورون ذوو الخبرة) نفس الأخطاء في محاولة لمحاكاة البنية المألوفة. في هذه المقالة، سنستعرض أهم 5 أخطاء عند العمل مع التعبيرات الشرطية في Kotlin ونوضح كيفية تجنبها. هيا بنا!

\n\n

الخطأ رقم 1: محاولة إدراج العامل الثلاثي مباشرة

\n\n

الخطأ الأكثر شيوعًا هو كتابة كود بأسلوب Java:

\n\n
// ❌ خطأ: لا يوجد مثل هذا التركيب في Kotlin\nval max = (a > b) ? a : b\n
\n\n

لن يقوم Kotlin بترجمة هذا الكود ببساطة. ستحصل على خطأ: Unresolved reference: ?. يقع العديد من المطورين في الحيرة ويبدأون في البحث عن مكتبات أو إضافات "تضيف" العامل الثلاثي. لا تفعل هذا!

\n\n

ما هو الصحيح؟

\n\n

في Kotlin، if ليس عاملًا، بل تعبيرًا. إنه يُرجع قيمة. لذلك بدلاً من العامل الثلاثي، استخدم if-else العادي:

\n\n
// ✅ الطريقة الصحيحة: if كتعبير\nval max = if (a > b) a else b\n
\n\n

الكود يُقرأ بشكل أسهل من العامل الثلاثي التقليدي، خاصة إذا كان الشرط معقدًا. تذكر: if في Kotlin يُرجع دائمًا القيمة الأخيرة في كل فرع.

\n\n

الخطأ رقم 2: نسيان else عند التعيين

\n\n

بما أن if هو تعبير، فإنه ملزم بإرجاع قيمة. إذا كتبت:

\n\n
// ❌ خطأ: لا يوجد else، المترجم لا يعرف ماذا يُرجع\nval result = if (condition) "Yes"\n
\n\n

سيصدر المترجم خطأ: All branches of 'if' expression are required to return a value. هذا منطقي: ماذا يجب أن يكون في result إذا كان الشرط خاطئًا؟ null؟ سلسلة فارغة؟ المترجم لا يخمن.

\n\n

ما هو الصحيح؟

\n\n

أضف دائمًا else:

\n\n
// ✅ صحيح: كلا الفرعين يُرجع قيمة\nval result = if (condition) "Yes" else "No"\n
\n\n

الاستثناء هو إذا كنت تستخدم if كعامل (بدون تعيين). عندها لا يكون else ضروريًا:

\n\n
// if كعامل - else غير مطلوب\nif (condition) {\n    println("Yes")\n}\n
\n\n

الخطأ رقم 3: استخدام if-else المتداخلة المعقدة بدلاً من when

\n\n

عندما يكون لديك أكثر من خيارين، تتحول سلسلة if-else if-else إلى "سباغيتي". انظر إلى هذه الفوضى:

\n\n
// ❌ سيء: if-else المتداخلة صعبة القراءة\nval status = if (code == 200) "OK"\n            else if (code == 404) "Not Found"\n            else if (code == 500) "Server Error"\n            else "Unknown"\n
\n\n

الأسطر تقفز، والعيون تتشتت. وإذا أضفت شرطين آخرين - سيكون كابوسًا.

\n\n

ما هو الصحيح؟

\n\n

استخدم when - وهو مشابه لـ switch ولكن بقدرات محسّنة:

\n\n
// ✅ ممتاز: when يُقرأ كجدول\nval status = when (code) {\n    200 -> "OK"\n    404 -> "Not Found"\n    500 -> "Server Error"\n    else -> "Unknown"\n}\n
\n\n

when في Kotlin هو أيضًا تعبير، لذا يمكنه إرجاع قيمة. وهو أكثر وضوحًا من سلسلة if-else. بالإضافة إلى ذلك، يدعم when شروطًا معقدة: النطاقات، الأنواع، التعبيرات العشوائية.

\n\n
// when مع نطاق\nval grade = when (score) {\n    i                

المدونات

توصيات الكتب