الصدق والكذب في روبي

تعديل
نسخ الدرس
تحميل الدرس

الصدق والكذب في روبي (Truthiness & Falsiness)

هل تعلم أن روبي تختلف عن معظم لغات البرمجة في تحديد ما هو "صادق" وما هو "كاذب"؟ في هذا الدرس، سنتعلم مفهوماً مهماً جداً يؤثر على كيفية كتابة الشروط.

ما المقصود بـ Truthiness و Falsiness؟

عندما نستخدم قيمة في شرط (مثل if)، روبي تحتاج أن تقرر: هل هذه القيمة تُعتبر صادقة (truthy) أم كاذبة (falsy)؟

الناتج:

القاعدة الذهبية في روبي

في روبي، فقط nil و false تُعتبران كاذبتين (falsy). كل شيء آخر صادق (truthy)!

هذه القاعدة بسيطة جداً وتجعل روبي مختلفة عن لغات مثل JavaScript أو Python.

القيم الكاذبة (Falsy Values)

في روبي، هناك فقط قيمتان كاذبتان:

1. القيمة false

الناتج:

2. القيمة nil

الناتج:

القيم الصادقة (Truthy Values)

كل شيء آخر في روبي يُعتبر صادقاً! حتى القيم التي قد تتوقع أنها كاذبة:

الرقم صفر (0) صادق!

الناتج:

مهم: في لغات مثل JavaScript و C، الرقم 0 يُعتبر كاذباً. لكن في روبي، 0 صادق!

النص الفارغ ("") صادق!

الناتج:

مهم: في Python و JavaScript، النص الفارغ "" يُعتبر كاذباً. لكن في روبي، هو صادق!

المصفوفة الفارغة ([]) صادقة!

الناتج:

القاموس الفارغ ({}) صادق!

الناتج:

جدول مقارنة الصدق والكذب

القيمةالصدق/الكذبملاحظة
false❌ كاذبةالقيمة المنطقية false
nil❌ كاذبةغياب القيمة
true✅ صادقةالقيمة المنطقية true
0✅ صادقةمختلف عن لغات أخرى!
""✅ صادقةالنص الفارغ صادق
" "✅ صادقةنص يحتوي مسافة
[]✅ صادقةمصفوفة فارغة
{}✅ صادقةقاموس فارغ
1✅ صادقةأي رقم غير صفر
-1✅ صادقةالأرقام السالبة أيضاً
"hello"✅ صادقةأي نص

التحقق باستخدام !! (Double Bang)

يمكنك استخدام !! لتحويل أي قيمة إلى قيمة منطقية حقيقية (true أو false):

الناتج:

كيف يعمل !!؟

  • ! الأول يعكس القيمة (truthy تصبح false، falsy تصبح true)
  • ! الثاني يعكسها مرة أخرى (للحصول على القيمة المنطقية الصحيحة)

الناتج:

أمثلة عملية

التحقق من وجود قيمة

الناتج:

التحقق من متغير قد يكون nil

الناتج:

التعامل مع نتائج البحث

الناتج:

الفرق بين nil و false

رغم أن كلاهما كاذب، إلا أنهما مختلفان:

الناتج:

  • nil يعني "غياب القيمة" أو "لا شيء"
  • false يعني "لا" أو "خاطئ" بشكل صريح

التحقق من القيم الفارغة

إذا أردت التحقق من أن نصاً أو مصفوفة فارغة، استخدم empty?:

الناتج:

التحقق الآمن باستخدام &.

الناتج:

(الناتج فارغ لأن nil&.empty? يُرجع nil والذي يُطبع كسطر فارغ)

مقارنة روبي مع لغات أخرى

القيمةروبيJavaScriptPython
0✅ صادق❌ كاذب❌ كاذب
""✅ صادق❌ كاذب❌ كاذب
[]✅ صادق❌ كاذب*❌ كاذب
{}✅ صادق❌ كاذب*❌ كاذب
nil/null/None❌ كاذب❌ كاذب❌ كاذب
false/False❌ كاذب❌ كاذب❌ كاذب

*في JavaScript، المصفوفات والكائنات الفارغة صادقة، لكن عند المقارنة تتصرف بشكل معقد.

تذكّر: روبي أبسط! فقط nil و false كاذبتان.

نصائح مهمة

  1. لا تقارن بـ true أو false صراحةً عادةً:

  2. استخدم nil? للتحقق من nil تحديداً:

  3. استخدم empty? للتحقق من الفراغ:

  4. استخدم || للقيم الافتراضية:

تمرين: التنبؤ بالصدق والكذب

حان وقت التطبيق! في محرر الشيفرة على اليسار:

المطلوب: استخدم !! لتحويل القيم التالية إلى قيم منطقية واطبع النتيجة:

  1. false
  2. nil
  3. 0
  4. ""
  5. []
  6. "روبي"

الناتج المتوقع:

تلميح: استخدم puts !!value لكل قيمة. تذكر أن فقط nil و false هما الكاذبتان!


تذكّر: قاعدة روبي البسيطة: فقط nil و false كاذبتان. كل شيء آخر صادق! هذا يجعل كتابة الشروط أسهل وأكثر قابلية للتنبؤ.