العامل الثلاثي (Ternary Operator)
تعلمنا في الدروس السابقة كيفية استخدام if-else و case/when لاتخاذ القرارات. لكن أحياناً نحتاج لشرط بسيط جداً ونريد كتابته بشكل مختصر. هنا يأتي دور العامل الثلاثي (Ternary Operator).
ما هو العامل الثلاثي؟
العامل الثلاثي هو طريقة مختصرة لكتابة جملة if-else بسيطة في سطر واحد. سُمي "ثلاثياً" لأنه يتكون من ثلاثة أجزاء:
مثال أساسي
الناتج:
كلا الطريقتين تعطي نفس النتيجة، لكن العامل الثلاثي أقصر بكثير.
البنية الأساسية
أو يمكن استخدامه مباشرة:
شرح الأجزاء الثلاثة
| الجزء | الوصف | مثال |
|---|---|---|
| الشرط | التعبير الذي يُقيّم إلى true أو false | age >= 18 |
? | الفاصل بين الشرط والنتيجة الصحيحة | ? |
| النتيجة إذا صحيح | القيمة التي تُرجع إذا كان الشرط true | "بالغ" |
: | الفاصل بين النتيجتين | : |
| النتيجة إذا خاطئ | القيمة التي تُرجع إذا كان الشرط false | "قاصر" |
أمثلة عملية
مثال 1: التحقق من الإيجابية
الناتج:
مثال 2: زوجي أم فردي
الناتج:
مثال 3: القيمة المطلقة
الناتج:
مثال 4: رسالة ترحيب
الناتج:
مثال 5: تحديد السعر
الناتج:
استخدام العامل الثلاثي مع puts مباشرة
يمكن استخدام العامل الثلاثي داخل puts مباشرة:
الناتج:
مثال: عرض الحالة
الناتج:
العامل الثلاثي في String Interpolation
يمكن استخدامه داخل #{} في النصوص:
الناتج:
مثال: صيغة الجمع والمفرد
الناتج:
متى تستخدم العامل الثلاثي؟
استخدمه عندما:
- الشرط بسيط - شرط واحد بدون تعقيد
- النتيجتان قصيرتان - قيم بسيطة أو نصوص قصيرة
- تريد تعيين قيمة لمتغير - بناءً على شرط بسيط
لا تستخدمه عندما:
- الشرط معقد - يحتوي على
&&أو||متعددة - النتيجة تتطلب عدة أسطر - شيفرة طويلة أو معقدة
- هناك أكثر من احتمالين - تحتاج
elsif
المقارنة: العامل الثلاثي vs if-else
| الميزة | العامل الثلاثي | if-else |
|---|---|---|
| الإيجاز | ممتاز (سطر واحد) | يحتاج عدة أسطر |
| القراءة | جيد للشروط البسيطة | أوضح للشروط المعقدة |
| الشيفرة الطويلة | غير مناسب | مناسب |
| تعدد الشروط | لا يدعم | يدعم (elsif) |
| تعيين متغير | مثالي | جيد |
تحويل if-else إلى عامل ثلاثي
مثال 1: تحويل بسيط
قبل (if-else):
بعد (عامل ثلاثي):
الناتج:
مثال 2: تحويل مع puts
قبل:
بعد:
الناتج:
مثال 3: تحويل مع حساب
قبل:
بعد:
الناتج:
تداخل العامل الثلاثي (تجنبه!)
تقنياً، يمكن تداخل العوامل الثلاثية، لكن هذا يجعل الشيفرة صعبة القراءة:
الناتج:
الأفضل: استخدم if-elsif-else أو case/when:
نصائح مهمة
- اجعله بسيطاً - العامل الثلاثي للشروط البسيطة فقط
- لا تتداخل - تجنب وضع عامل ثلاثي داخل آخر
- استخدم الأقواس عند الحاجة - للوضوح في التعبيرات المعقدة
- فكر في القراءة - إذا صعب فهمه، استخدم if-else
- مثالي للتعيين - أفضل استخدام له هو تعيين قيمة لمتغير
أمثلة إضافية
التحقق من القسمة على صفر
الناتج:
قيمة افتراضية
الناتج:
ملاحظة: يمكن استخدام
||أيضاً للقيم الافتراضية:display_name = name || "زائر"
رسالة نجاح أو فشل
الناتج:
جدول ملخص
| الصيغة | الوصف | مثال |
|---|---|---|
شرط ? أ : ب | إرجاع أ إذا صحيح، ب إذا خاطئ | x > 0 ? "موجب" : "سالب" |
متغير = شرط ? أ : ب | تعيين قيمة بناءً على شرط | status = active ? "نشط" : "متوقف" |
puts شرط ? أ : ب | طباعة قيمة بناءً على شرط | puts ok ? "نعم" : "لا" |
"#{شرط ? أ : ب}" | استخدام داخل نص | "#{x > 0 ? "+" : "-"}" |
تمرين: تحويل if-else إلى عامل ثلاثي
حان وقت التطبيق! في محرر الشيفرة على اليسار:
المطلوب: حوّل الشيفرة التالي من if-else إلى عامل ثلاثي:
الشيفرة الأصلية:
- عرّف متغير
number = 10 - استخدم العامل الثلاثي مع puts لطباعة "موجب" إذا كان الرقم أكبر من صفر، و"سالب أو صفر" إذا لم يكن
الناتج المتوقع:
تلميح: الصيغة هي:
puts الشرط ? "النتيجة الأولى" : "النتيجة الثانية"
تذكّر: العامل الثلاثي أداة قوية لتبسيط الشروط البسيطة، لكن استخدم if-else للشروط المعقدة!