قاعدة if في البرمجة ؟
السلام عليكم ورحمة الله وبركاته
الفهرس
المقدمة
حسناً، في هذا الدرس سنتعرف على قاعدة if
وهي ببساطة أداة تستخدم لتحديد مسار البرنامج بناءً على شرط معين
وتستخدم بشكل دائم في البرمجة وهذا بسبب أنك تستطيع توجيه البرنامج للقيام بأمور معينة بناءً على شروط معينة
- إذا كان الشخص لديه الصلاحيات المعينة نفذ هذا الجزء من الكود وإلا نفذ جزء آخر
- إذا كان المبلغ أكبر من ثمن السلعة فقم بشراء السلعة وإلا أرفض عملية الشراء
- إذا حاول الشخص تسجيل الدخول بشكل خاطئ أكثر من
3
مرات فقم بحظره مؤقتًا - ... وغيرها من الأمور التي تحتاج لتحكم في مسار البرنامج
والكثير من القرارات التي تحتاج لاتخاذها بشكل مختلف بناءًا عن شرط أو موقف معين
كيف نكتب الشرط 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++
وهي فقط تطبع النص التي نكتبه بعد علامة<<
لا تحاول التركيز معها كثيرًا هنا، فقط تعلم أنها تطبع النصوص على الشاشة
اغلب اللغات لديها أمر طباعة مشابه لها مثل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
لنتخيل أننا لدينا درجات طالب ونريد تحديد تقديره بناءً على درجاته
- فإذا كانت الدرجة أكبر من
85
سيكون تقديرهA
- وإذا كانت الدرجة أكبر من
75
سيكون تقديرهB
- وإذا كانت الدرجة أكبر من
65
سيكون تقديرهC
- وإذا كانت الدرجة أكبر من
50
سيكون تقديرهD
- وإذا كانت الدرجة أقل من
50
سيكون تقديرهF
هل يمكنك أن تفكر قليلًا وتتخيل فقط كيف سيكون شكل الكود ؟
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
التالية
في هذا المثال:
- أولًا سيمر على الـ
if
الأولى سيجد أن الشرطstudent_grade >= 85
لا يتحقق لأن الدرجة60
أقل من85
فسيتجاهل الـif
- ثم يمر للـ
if
التالية سيجد أن الشرطstudent_grade >= 75
لا يتحقق لأن الدرجة60
أقل من75
فسيتجاهل الـif
- ثم يمر للـ
if
التالية سيجد أن الشرطstudent_grade >= 65
يتحقق لأن الدرجة60
أكبر من65
فسينفذ الـif
ويطبعThe student grade is C
هل سيتوقف البرنامج بعد ذلك ؟ لا بل سيكمل !!
- ثم يمر للـ
if
التالية سيجد أن الشرطstudent_grade >= 50
يتحقق لأن الدرجة60
أكبر من50
فسينفذ الـif
ويطبع تقدير الطالبThe student grade is D
- ثم يمر للـ
if
التالية وسيجد أن الشرطstudent_grade < 50
لا يتحقق لأن الدرجة60
أكبر من50
فسيتجاهل الـ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
وتنفيذ أكثر من سطر داخلها