قاعدة if في البرمجة ؟

السلام عليكم ورحمة الله وبركاته

وقت القراءة: ≈ 15 دقيقة

المقدمة

حسناً، في هذا الدرس سنتعرف على قاعدة if وهي ببساطة أداة تستخدم لتحديد مسار البرنامج بناءً على شرط معين
وتستخدم بشكل دائم في البرمجة وهذا بسبب أنك تستطيع توجيه البرنامج للقيام بأمور معينة بناءً على شروط معينة

والكثير من القرارات التي تحتاج لاتخاذها بشكل مختلف بناءًا عن شرط أو موقف معين

كيف نكتب الشرط if في البرمجة ؟

في لغات البرمجة نكتب الشرط if بالشكل التالي:

if (الشرط)
  // الكود الذي سيتم تنفيذه إذا كان الشرط صحيح

طريقة كتابة أمر if في البرمجة بسيطة جدًا
أولًا نكتب if ثم نفتح قوسين ونكتب الشرط الذي نريد التحقق منه
الشرط هنا تكون عملية من عمليات الـ boolean التي تعرفنا عليها سابقًا والتي تعطي قيمة true أو false
بالتالي إذا كان الشرط يعطي قيمة true سيتم تنفيذ الكود الذي يليه وإذا كان false سيتم تجاهل الكود ولن يتم تنفيذه

بعض اللغات قد لا تحتاج إلى فتح أقواس لكتابة الشرط وتكتب الشرط بشكل مباشر بعد كلمة if
مثل لغة Python ولغة Ruby ولغات أخرى

# Python
if الشرط:
  # الكود الذي سيتم تنفيذه إذا كان الشرط صحيح

# Ruby
if الشرط
  # الكود الذي سيتم تنفيذه إذا كان الشرط صحيح

مثال على استخدام if

string name = "Ahmed";
int id = 125;

if (id == 125 && name == "Ahmed")
  cout << "Welcome " + name + " in the system";

هنا لدينا متغير يمثل اسم الشخص name ومتغير يمثل رقم الهوية الخاص به id
هنا نريد أن نتحقق من هوية الشخص قبل أن نسمح له بفعل أي شيء في النظام
لذلك نستخدم if ونكتب في داخل الأقواس الشرط الذي نريده وهو التحقق من هوية واسم الشخص قبل السماح له بالدخول

ثم عندما يتحقق الشرط سيتم تنفيذ الكود الذي يليه وهو طباعة رسالة ترحيبية للشخص على سبيل المثال


ملحوظة: أمر cout مجرد أمر طباعة للنصوص في لغة البرمجة C++ وهي فقط تطبع النص التي نكتبه بعد علامة <<
لا تحاول التركيز معها كثيرًا هنا، فقط تعلم أنها تطبع النصوص على الشاشة
اغلب اللغات لديها أمر طباعة مشابه لها مثل print في Python أو console.log في JavaScript و cout في C++ وغيرها
فقط مجرد أوامر تطبع النصوص على الشاشة

cout << "Welcome Ahmed in the system"; // C++
printf("Welcome Ahmed in the system"); // C
print("Welcome Ahmed in the system") // Python
console.log("Welcome Ahmed in the system") // JavaScript
puts "Welcome Ahmed in the system" // Ruby
echo "Welcome Ahmed in the system" // PHP

كل هذه الأوامر تقوم بطباعة النصوص على الشاشة ولكن طريقة كتابة الأمر يختلف بحسب اللغة


حسنًا لنرجع لموضوعنا الأساسي ونعطي مثال آخر:

int speed = 200;

if (speed > 300)
  cout << "Speed exceeded 300";

هنا لدينا متغير يمثل سرعة السيارة speed ونريد أن نتحقق منها
إذا كانت السرعة أكبر من 300 سيتم طباعة رسالة تقول أن السرعة تجاوزت 300
وإذا كانت السرعة أقل من 300 لن يتم تنفيذ أي شيء

الآن المتغير speed يساوي 200 لذلك عندما يتم تفقد الشرط speed > 300 ستجد اأن المتغير speed قيمته أقل من 300
لذلك لن يتم تنفيذ الكود الذي يلي if لأن الشرط لم يتحقق وأعطى false
وبالتالي لن يتم طباعة أي شيء على الشاشة

كتابة أكثر من سطر داخل الـ if

الآن راقب الكود التالي:

int id = 325;

if (id == 123)
  cout << "The id is correct\n";
  cout << "Welcome to the system\n";

هنا نريد أن نتحقق من هوية شخص ما وإذا كانت صحيحة نرحب به في النظام
هل تستطيع تخمين ماذا سيحدث ؟

لوحلة الأولى ستظن أنه لن يطبع شيء لأن الشرط لم يتحقق ولم يعطي قيمة true لأن id لا يساوي 123 بل يساوي 325
بالتالي ستقول أنه لن يتم تنفيذ الكود الذي يلي if لأن الشرط لم يتحقق

لكن إذا جربت تشغيل الكود ستجد أنه سيطبع الرسالة الثانية فقط على الشاشة ولم يطبع الرسالة الأولى
لماذا ؟

هذا بسبب أن الـ if تنفذ أول سطر فقط عندما يتم تحقيق الشرط
وباقي الأسطر تعتبر خارج نطاق الـ if بالتالي سيتم تنفيذها على أي حالي لأنها ليست ضمن نطاق الـ if

// if هذا الجزء خارج نطاق الـ
int id = 325;

if (id == 123)
  cout << "The id is correct\n"; // if أول سطر فقط هو الذي ضمن نطاق الـ

// if الجزء التالي كله خارج نطاق الـ
// بالتالي سيتم تنفيذه على أي حال
cout << "Outside 'if' scope\n";
string name = "Ahmed";
cout << "Hi " + name + '\n';

لاحظ السطر الأول فقط الذي يلي if هو الذي ضمن نطاقه ومتعلق به أما باقي الأسطر خارج نطاق الـ if


إذا أردت تنفيذ أكثر من سطر داخل الـ if يجب عليك وضعها داخل قوسين المجموعة {} أو الأقواس المتعرجة
وهذه الأقواس تحدد نطاق الأوامر مثل نطاق الـ if ويتم تنفيذ كل ما بداخلها عندما يتم تحقيق الشرط
هذا مفهوم يسمى Scope وهو يحدد نطاق الأوامر والمتغيرات والدوال وغيرها وهو مفهوم يحتاج لمقالة منفصلة لشرحه

if (الشرط) {
  // الأوامر التي سيتم تنفيذها إذا كان الشرط صحيح
  // الأوامر التي سيتم تنفيذها إذا كان الشرط صحيح
  // الأوامر التي سيتم تنفيذها إذا كان الشرط صحيح
}

لاحظ أننا هنا وضعنا أقواس المجموعة {} بعد الـ if وهذه الأقواس تحدد وتكبر حجم نطاق الـ if
بالتالي عندما يتحقق الشرط سيتم تنفيذ كل الأوامر التي بداخل أقواس المجموعة {} وليس فقط السطر الأول فقط

int id = 123;

if (id == 123) {
  cout << "The id is correct\n";
  cout << "Welcome to the system\n";
}

لاحظ الفرق هنا أننا وضعنا الأوامر داخل أقواس المجموعة {} بالتالي حجم نطاق الـ if أصبح يشمل كل شيء داخل حدود الأقواس
فعندما يتحقق الشرط سيتم تنفيذ كل الأوامر التي بداخل الأقواس
وعندما لا يتحقق الشرط لن يتم تنفيذ أي شيء داخل الأقواس

نبذة مختصرة على الـ scope

الـ scope هو نطاق الأوامر وحدودها وابعادها
أي أنه يرمز أن هذه الأوامر خاصة بنطاق معين

فمثلا الأوامر التي بداخل الـ if تكون خاصة بنطاق الـ if ولا يمكن الوصول إليها من خارج الـ if
والمتغيرات التي يتم تعريفها داخل الـ if لا يمكن الوصول إليها من خارج الـ if

int id = 123;

if (id == 123) {
  int name = "Ahmed";
  cout << "The id is correct\n";
  cout << "Welcome " + name + " to the system\n";
}

هنا المتغير name تم تعريفه داخل الـ if بالتالي لا يمكن الوصول إليه من خارج الـ if
فإذا حاولت الوصول إليه من خارج الـ if ستحصل على خطأ

int id = 123;

if (id == 123) {
  int name = "Ahmed";
  cout << "The id is correct\n";
  cout << "Welcome " + name + " to the system\n";
}

cout << name; // ❌ خطأ

هنا ستحصل على خطأ لأن المتغير name تم تعريفه داخل نطاق الـ if أي ضمن الـ scope الخاص بالـ if
بالتالي لا يمكنك ان تستخدمه إلا داخل نطاق الـ if فقط


بالطبع المتغيرات التي تعرف خارج الـ if يمكنك أن تستخدمها داخل الـ if

int id = 123;
int name = "Ahmed";

if (id == 123) {
  cout << "The id is correct\n";
  cout << "Welcome " + name + " to the system\n";
}

هنا بما أن المتغير name تم تعريفه خارج الـ if يمكنك استخدامه داخل الـ if بدون مشاكل
لأن المتغير name تم تعريفه في نطاق خارج الـ if أي scope خارجي أعلى من الـ if
بالتالي scope الـ if ضمن هذا الـ scope الخارجي لذا يمكنه الوصول إليه
لأن كل scope داخلي يمكنه الوصول إلى المتغيرات الخارجية التي في الـ scope الخارجي له لكن العكس لا يمكن

يمكنك تبسيط الأمر في جملة الـ scope الأعلى يكون مرئي للـ scope الأدنى والعكس غير صحيح

{
  // Scope 1
  int x = 10;

  {
    // Scope 2
    int y = 20;
    cout << x; // ✅ x يمكن الوصول إلى

    {
      // Scope 3
      int z = 30;
      cout << x; // ✅ x يمكن الوصول إلى
      cout << y; // ✅ y يمكن الوصول إلى
    }

    // Scope 2
    cout << x; // ✅ x يمكن الوصول إلى
    cout << y; // ✅ y يمكن الوصول إلى
    cout << z; // ❌ z لا يمكن الوصول إلى

  }

  // Scope 1
  cout << x; // ✅ x يمكن الوصول إلى
  cout << y; // ❌ y لا يمكن الوصول إلى
  cout << z; // ❌ z لا يمكن الوصول إلى
}

هذا مثال بسيط يوضح الـ scope وكيف يمكن الوصول إلى المتغيرات داخل الـ scope وخارجه
في الـ scope 1 عرفنا المتغير x وفي الـ scope 2 عرفنا المتغير y وفي الـ scope 3 عرفنا المتغير z
ونلاحظ أن المتغير x يمكن الوصول إليه من أي scope لأنه تم تعريفه في الـ scope 1 الأعلى
أما المتغير y يمكن الوصول إليه من الـ scope 2 والـ scope 3 فقط لأنه تم تعريفه في الـ scope 2 الأعلى بالنسبة للـ scope 3
والمتغير z يمكن الوصول إليه فقط من الـ scope 3 لأنه تم تعريفه في الـ scope 3 فقط

لأنه كما قلنا أن الـ scope الأدنى يمكنه الوصول للـ scope الأعلى

لاحظ أيضًا أن الـ scope 1 لا يمكنه الوصول إلى المتغيرات y و z لأنها تم تعريفها في الـ scope 2 والـ scope 3
وهو لا يستطيع الوصول إلى المتغيرات التي تم تعريفها في الـ scope الداخلي له
لأن الـ scope لا يمكنه الوصول إلى الـ scope الأدنى منه

لكن العكس صحيح كما رأينا أن الـ scope 2 يمكنه الوصول إلى المتغيرات التي تم تعريفها في الـ scope 1
ورأينا أن الـ scope 3 يمكنه الوصول إلى المتغيرات التي تم تعريفها في الـ scope 2 والـ scope 1


هذا كان نبذه مختصرة عن مفهوم الـ scope وهو مفهوم مهم جدًا في البرمجة ويجب فهمه جيدًا
وقد يختلف قليلًا من لغة برمجة لأخرى وقد تجد خصائص معينة تختلف من لغة لأخرى

لذا من المهم جدًا في أي لغة تتعلمها أن تعرف كيف تتعامل اللغة مع الـ scope وكيف تعمل فيه

كتابة أكثر من if

لنتخيل أننا لدينا درجات طالب ونريد تحديد تقديره بناءً على درجاته

هل يمكنك أن تفكر قليلًا وتتخيل فقط كيف سيكون شكل الكود ؟

int student_grade = 70; // درجة الطالب

if (student_grade >= 85)
  cout << "The student grade is A\n";

if (student_grade >= 75)
  cout << "The student grade is B\n";

if (student_grade >= 65)
  cout << "The student grade is C\n";

if (student_grade >= 50)
  cout << "The student grade is D\n";

if (student_grade < 50)
  cout << "The student grade is F\n";

هنا قمنا بكتابة أمر if لكل تقدير وكل if يحتوي على شرط معين كما ترى
هل يمكنك أن تتبع الكود وتفهم ماذا سيحث عندما تكون درجة الطالب 60 مثلاً ؟

أول شيء المتغير student_grade يساوي 60 وهي درجة الطالب
الآن البرنامج سيمر على كل if ويتحقق من الشرط الخاص به وعندما يجد شرط يعطيه true سينفذ ما بداخل الـ if
وعندما يجد شرط يعطيه false سيتجاهل الـ if ويمر للـ if التالية

في هذا المثال:

هل سيتوقف البرنامج بعد ذلك ؟ لا بل سيكمل !!

ناتج الطباعة النهائي على الشاشة سيكون:

The student grade is C
The student grade is D

هل ترى المشكلة ؟
المشكلة هنا أن البرنامج يمر على كل if بشكل منفصل ويتحقق من الشرط الخاص به وينفذه إذا كان الشرط يعطي true
ولا يتوقف عندما يجد شرط يعطي true بل يستمر في التحقق من الـ if التالية ويتحقق منها وهكذا مع كل if يقابلها

وهذا قد يولد لنا بعض المشاكل في بعض الأحيان لأنه يمكن أن يتم تنفيذ أكثر من if وأنت لا تريداها
نريده مع أول if تنفذ وتحقق المطلوب ينفذها ثم يتوقف ولا يتفقد أي if أخرة

هنا لدينا أكثر من حل
الأول هو تغير الشرط الخاص بكل if ليتأكد أن كل if تستهدف درجات معينة ولا تتداخل مع بعضها هكذا

int student_grade = 70; // درجة الطالب

if (student_grade >= 85 && student_grade <= 100)
  cout << "The student grade is A\n";

if (student_grade >= 75 && student_grade < 85)
  cout << "The student grade is B\n";

// ... وهكذا

هنا قمنا بتغير الشرط لكل if ليتناسب مع الدرجات المطلوبة ولا يتداخل مع بعضها

الحل الثاني سنتعرف عليه في نهاية المقالة لكن أولًا لنتعرف على الـ else

الـ else

الـ else هي جزء مكمل للأمر if وهو اختياري وتستخدم لتنفيذ جزء معين من الكود عندما لا يتحقق الشرط الخاص بالـ if
بمعنى آخر، يتم تنفيذ الكود الموجود في الـ else عندما تكون قيمة الشرط في الـ if تساوي false

طريقة كتابة الـ else في البرمجة بسيطة جدًا، وتأتي بعد الـ if بالشكل التالي:

if (الشرط) {
    // الكود الذي سيتم تنفيذه إذا كان الشرط صحيح
} else {
    // الكود الذي سيتم تنفيذه إذا كان الشرط غير صحيح
}

مثال على استخدام else

int speed = 200;

if (speed > 300)
    cout << "Speed exceeded 300\n";
else
    cout << "Speed is within safe limits\n";

في هذا المثال، إذا كانت السرعة speed أكبر من 300 سيتم طباعة Speed exceeded 300، أما إذا كانت السرعة speed أقل من أو تساوي 300 سيتم طباعة Speed is within safe limits

فأول شيء سيتم المرور على الشرط ويرى هل يساوي true أم false
وبما أن المتغير speed يساوي 200 فالشرط speed > 300 لن يتحقق وسيعطي قيمة false
بالتالي سيتم تنفيذ الكود الموجود في الـ else وسيتم طباعة Speed is within safe limits على الشاشة


مثال آخر على استخدام else
سأعطيك رقم وسنتحقق هل هو زوجي أم فردي

int number = 11;

if (number % 2 == 0)
    cout << "The number is even\n";
else
    cout << "The number is odd\n";

هنا سنتحقق من الرقم 10 ونرى هل هو زوجي أم فردي
لذلك نقوم بجلب باقي قسمة الرقم على 2 ونرى إذا كانت الباقي 0 يعني أنه يقبل القسمة على 2 بدون كسور بالتالي يكون الرقم زوجي
وإذا كان الباقي 1 يعني أنه لا يقبل القسمة على 2 بالتالي يكون الرقم فردي

هنا الرقم 11 لا يقبل القسمة على 2 لأن قسمته على 2 تعطي عدد كسري بالتالي يكون هناك باقي قسمة لذلك يكون الرقم فردي وسيتم طباعة The number is odd على الشاشة

استخدام else if

يمكنك مع الـ else أن تكتب شرط في if جديدة وهو يستخدم لتحديد شرط آخر يتم التحقق منه إذا لم يتحقق الشرط الأول

if (الشرط) {
    // الكود الذي سيتم تنفيذه إذا تحقق الشرط
    // واذا لم يتحقق الشرط فسينتقل الشرط التالي
} else if (الشرط) {
    // الكود الذي سيتم تنفيذه إذا تحقق الشرط
    // واذا لم يتحقق الشرط فسينتقل الشرط التالي
} else if (الشرط) {
    // الكود الذي سيتم تنفيذه إذا تحقق الشرط
    // واذا لم يتحقق الشرط فسينتقل الشرط التالي
} else {
  // الكود الذي سيتم تنفيذه إذا لم يتحقق أي شرط من الشروط السابقة
}

لاحظ أننا هنا نستخدم else if لنبني شيء يشبه السلسلة فإذا لم يتحقق الشرط الأول فسينتقل للشرط التالي وهكذا
وعند أول شرط يتحقق سيتم تنفيذ الكود الخاص به ثم يخرج من سلسلة الشروط ولا يكمل التحقق من الشروط الباقية
وعندما لا يتحقق أي شرط من الشروط السابقة سيتم تنفيذ الـ else الأخير

لنرى مثال على ذلك

int speed = 100;

if (speed >= 300)
    cout << "Speed is equal or greater than 300\n";
else if (speed < 300 && speed > 200)
    cout << "Speed is between 200 and 300\n";
else
    cout << "Speed is equal or less than 200\n";

هنا يتم التحقق من السرعة speed وإذا كانت أكبر من أو يساوي 300 سيتم طباعة Speed is equal or greater than 300
وإذا كانت أقل من 300 وأكبر من 200 سيتم طباعة Speed is between 200 and 300
وإذا لم تتحقق أي من الشروط السابقة سيتم طباعة Speed is equal or less than 200 وهي أخر else التي بلا شرط

لاحظ أننا هنا استخدمنا else if وهي تستخدم لتحديد شرط آخر يتم التحقق منه إذا لم يتحقق الشرط الأول
وهذا يعني أنه يتم التحقق من الشرط الأول وإذا لم يتحقق يتم التحقق من الشرط الثاني وهكذا

ومع أول شرط يتحقق وينفذ فسوف يتوقف ولن يكمل التحقق من الشروط الباقية
لأننا هنا ربطنا الشروط ببعضها البعض ولم تعد منفصلة

بالتالي عندما تجد سلسلة من الشروط بها if و else if و else فتأكد أنه مستحيل أن يتم تنفيذ شرطين في نفس اللحظة
يجب أن يتم تحقيق شرط واحد فقط سواء كان أول شرط والذي يكون في if أو يتم تحقيق أحد الـ else if وإذا لم يحقق أي شرط فسيتم تنفيذ الـ else


بالطبع عندما تريد تنفيذ سطر واحد فيمكنك عدم وضع {}
لكن إذا كنت تريد تنفيذ أكثر من سطر يجب عليك وضع {}


الآن انتبه إلى ما سأقوله تاليًا
لاحظ أن كل سلسلة من الشروط تكون مستقلة عن السلسلة الأخرى

int speed = 100;

if (speed >= 300)
    cout << "Speed is equal or greater than 300\n";
else if (speed < 300 && speed > 200)
    cout << "Speed is between 200 and 300\n";
else
    cout << "Speed is equal or less than 200\n";

// سلسلة أخرى من الشروط
if (speed > 50)
    cout << "Speed is greater than 50\n";
else
    cout << "Speed is less than or equal to 50\n";

هنا لدينا سلسلة شروط تبدأ من الـ if وتنتهي بالـ else وبعدها سلسلة شروط أخرى تبدأ من الـ if وتنتهي بالـ else

وهذه السلسلتين مستقلتين عن بعضهما البعض كأنهما لا يعرفان بعض فهذا كود وهذا كود آخر تمامًا منفصل


أنتبه هنا بأن كل سلسلة if و else if و else يجب أن تكون متصلة ببعضها البعض ولا يمكن وضع شيء بينها
وإذا وضعت شيء بينها ستحصل على خطأ

int speed = 100;

if (speed >= 300) {
    cout << "Speed is equal or greater than 300\n";
    cout << "Please slow down\n";
}

cout << "Hello World\n"; // ❌ خطأ

else {
    cout << "Speed is less than 300\n";
}

لاحظ هنا أننا وضعنا cout << "Hello World\n"; بين الـ if والـ else وهذا خطأ
لأنه بوضع كود هكذا بينهما سيظن البرنامج الـ if مستقلة بذاتها وليست مرتبطة بأي سلسلة من الشروط
ثم أمر الطباعة cout << "Hello World\n"; سيعتبره سطر كود اعتيادي

ثم يتفاجيء بوجود else تخرج له من العدم وبنسبة للبرنامج فهذه الـ else لا ترتبط بأي if بل هو يعتبرها الآن بداية سلسلة شروط جديدة وبما أنه else فيجب أن يكون قبلها if لكنه لم يجده بالتالي ستحصل على خطأ

نفس الفكرة تنتطبق على الـ else if أيضًا فيجب أن يكون قبلها يا أمر if أو else if مثلها دون أي شيء بينهما

int speed = 100;

if (speed >= 300) {
    cout << "Speed is equal or greater than 300\n";
    cout << "Please slow down\n";
}

cout << "Hello World\n"; // ❌ خطأ

else if (speed < 300 && speed > 200) {
    cout << "Speed is between 200 and 300\n";
}
else {
    cout << "Speed is equal or less than 200\n";
}

هنا نفس الشيء البرنامج سيظن أن الـ if مستقلة بذاتها وليست مرتبطة بأي سلسلة من الشروط
ثم يجد كود طباعة اعتيادي cout << "Hello World\n";
ثم يجد else if والذي سيعتبره بداية سلسلة شروط جديدة ولكنه لن يجد if قبلها لذلك سيعطيك خطأ في هذا اللحظة


بعض اللغات قد تجدها تدمج else if في كلمة واحدة elif أو elsif أو elseif وهي تعني نفس الشيء لكن بعض اللغات تحب أن تختصر أو لديها سبب معين لذلك

مثال درجات الطالب

لنقم بتطبيق ما تعلمناه الآن على مثال الطالب وتقديره

int student_grade = 70; // درجة الطالب

if (student_grade >= 85)
    cout << "The student grade is A\n";
else if (student_grade >= 75)
    cout << "The student grade is B\n";
else if (student_grade >= 65)
    cout << "The student grade is C\n";
else if (student_grade >= 50)
    cout << "The student grade is D\n";
else
    cout << "The student grade is F\n";

هنا ربطنا الشروط ببعضها عن طريق else if و else كما قلنا
وهذا يعني أنه عندما يتحقق شرط معين سيتم تنفيذه ويتوقف البرنامج ولن يكمل باقي الشرط لأن هناك شرط تحقق بالفعل ونفذنا الكود الخاص به
دعونا نتتبع الكود ونرى

  • أول شيء سيمر البرنامج على الشرط الأول student_grade >= 85 سيجد أن الشرط لا يتحقق لأن الدرجة 70 أقل من 85
  • ثم سيمر على الشرط الثاني student_grade >= 75 سيجد أن الشرط لا يتحقق لأن الدرجة 70 أقل من 75
  • ثم سيمر على الشرط الثالث student_grade >= 65 سيجد أن الشرط يتحقق لأن الدرجة 70 أكبر من 65
  • وبالتالي سيتم تنفيذ الـ if وسيطبع The student grade is C على الشاشة

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

وهذا هو الهدف من استخدام else و else if لتوقف البرنامج عندما يتحقق شرط معين ولا يتابع التحقق من الشروط الباقية

الـ Ternary Operator اختصار للـ if و else

بعض اللغات كالعادة يحبون الاختصارات والتبسيط وقد تجد أنهم يستخدمون طريقة مختصرة لكتابة الـ if و else

فبدلًا من كتابة الـ if و else هكذا

int speed = 100;

if (speed > 300)
    cout << "Speed exceeded 300\n";
else
    cout << "Speed is within safe limits\n";

يتم اختصار الأمر في سطر واحد فقط

int speed = 100;

speed > 300 ? cout << "Speed exceeded 300\n" : cout << "Speed is within safe limits\n";

لاحظ هنا أننا كتبنا الشرط speed > 300 ثم ? ثم الكود الذي سيتم تنفيذه إذا كان الشرط يعطي true ثم : ثم الكود الذي سيتم تنفيذه إذا كان الشرط يعطي false

وهذا الشكل يسمى بـ Ternary Operator وهو يستخدم لتبسيط الكود وتقليل عدد الأسطر والكتابة

(الشرط) ? (true الجزء الذي سينفذ إذا كان الشرط يعطي) : (false الجزء الذي سينفذ إذا كان الشرط يعطي);

لاحظ أنه بديل للـ if و else ويمكنك استخدامه في الكثير من الأمور وليس فقط في الطباعة
فمثلًا يمكنك استخدامه لتعريف متغير بقيمة معينة بناءً على شرط معين

int speed = 100;

string speed_status = speed > 300 ? "Speed exceeded 300" : "Speed is within safe limits";

هنا قمنا بتعريف متغير speed_status وقمنا بتعريف قيمته بناءً على الشرط speed > 300
فإذا كان الشرط يعطي true سيكون قيمة المتغير Speed exceeded 300 وإذا كان الشرط يعطي false سيكون قيمة المتغير Speed is within safe limits


بعض اللغات تستخدم نفس الفكرة ونفس الاختصار
لكن بعض اللغات قد تجدها تختصرها بشكل مختلف فمثلا في لغة Python تكون الطريقة كالتالي

speed = 100

speed_status = "Speed exceeded 300" if speed > 300 else "Speed is within safe limits"

لاحظ هنا أن في لغة Python تستخدم if و else في سطر واحد ولكن بشكل مختلف عن الـ Ternary Operator
ستجدها تضع القيمة أولًا التي سيتم اختيارها في حالة تحقق الشرط الذي يليها ثم تضع if وبعدها الشرط ثم else وبعدها القيمة الثانية التي سيتم اختيارها في حالة عدم تحقق الشرط

(true الجزء الذي سينفذ إذا كان الشرط يعطي) if (الشرط) else (false الجزء الذي سينفذ إذا كان الشرط يعطي)

الخلاصة

قاعدة if هي قاعدة تستخدم لتحديد مسار البرنامج بناءً على شرط معين
وتستخدم بشكل دائم في البرمجة لتحديد مسار البرنامج بناءً على شروط معينة
ويمكنك استخدام else و else if لتحديد شروط أخرى تتم التحقق منها إذا لم يتحقق الشرط الأول
ويمكنك استخدام الأقواس المتعرجة {} لتحديد نطاق الـ if والـ else والـ else if وتنفيذ أكثر من سطر داخلها