المعامل الثلاثي (Ternary Operator)
جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 40 من 56.
المعامل الثلاثي (ternary operator) هو اختصار من سطر واحد لجملة if/else التي ترجع قيمة. الصيغة هي condition ? value_if_true : value_if_false.
age = 20
status = age >= 18 ? "Eligible" : "Not Eligible"
puts status # Eligibleهذا يعادل كتابة:
status = if age >= 18
"Eligible"
else
"Not Eligible"
endاستخدم المعامل الثلاثي (ternary) عندما تُرجع كلتا الشعبتين قيمًا قصيرة. إذا كانت أي من الشعبتين تحتاج إلى أكثر من تعبير واحد، فارجع إلى if/else حقيقية: فحشر الكثير من الأشياء في المعامل الثلاثي يجعل قراءته صعبة.
يمكنك استخدامه مباشرة داخل تعبيرات أخرى، بما في ذلك الاستيفاء (interpolation):
count = 1
puts "#{count} item#{count == 1 ? "" : "s"}" # 1 عنصر
count = 5
puts "#{count} item#{count == 1 ? "" : "s"}" # 5 عناصرالتحدي
سهلاقرأ عددًا صحيحًا n من المدخلات. باستخدام المعامل الثلاثي (بدون كتل if/else)، اطبع بالضبط:
<n> is <label>حيث label هو:
positiveعندما يكونn > 0negativeعندما يكونn < 0zeroعندما يكونn == 0
تلميح: استخدم المعامل الثلاثي المتداخل، condition ? a : (other_condition ? b : c).
للمدخل 5 يكون المخرج 5 is positive. وللمدخل 0 يكون 0 is zero.
ورقة مرجعية
يعد العامل الثلاثي (ternary operator) اختصاراً من سطر واحد لـ if/else: condition ? value_if_true : value_if_false
age = 20
status = age >= 18 ? "Eligible" : "Not Eligible" # "Eligible"يمكن تداخل العوامل الثلاثية واستخدامها داخل إدراج النصوص (string interpolation):
count = 5
puts "#{count} item#{count == 1 ? "" : "s"}" # 5 items
# عامل ثلاثي متداخل
n = 3
label = n > 0 ? "positive" : (n < 0 ? "negative" : "zero")استخدم العامل الثلاثي فقط للفروع القصيرة والبسيطة — وفضل استخدام if/else عندما تحتاج الفروع إلى تعبيرات متعددة.
جرّب بنفسك
n = gets.to_i
# TODO: استخدم تعبيرًا ثلاثيًا لبناء التسمية، ثم puts
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على دوال السلاسل النصيةتضمين النصوص (String Interpolation)التكرار عبر السلاسل النصيةالتقسيم والربط (Split و Join)مراجعة - نساج النصوص4Blocks و Procs و Lambdas
ما هو الـ Block؟do..end مقابل الأقواس { }الكلمة المفتاحية yieldمعاملات الـ BlockProcs و Lambdasمراجعة - Custom Iterator مخصص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر الـ Hashesالـ Hashes المتداخلةالدمج والتحويلمراجعة - عداد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة الـ Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - Data Pipeline8اتخاذ القرار المتقدم
Case مع Classes و Regexwhen متعددة القيمالمعامل الثلاثي (Ternary Operator)Inline if / unlessمراجعة - مصنف الدرجات