If الشرطية (if Conditions)
الشروط (Conditions)
مفهوم الشروط من أهم مفاهيم البرمجة إن لم يكن أهمها، فما هي الشروط؟
في أغلب اﻷحيان أثناء البرمجة تحتاج لأن يتخذ البرنامج القرار بناءا على الموقف، فمثلاً في برمجة موقع تريد أن تتحقق أولاً عندما يفتح الزائر الموقع، هل الزائر قام بتسجيل الدخول سابقاً..؟ إجابة السؤال تكون بنعم أو ﻻ؛ true
أو false
فتريد أن تخبر البرنامج أنه إذا كان الزائر قد سجل دخوله مرة اسمح له بالدخول للبرنامج، غير ذلك قم بتحويله على صفحة تسجيل الدخول!
فنحن نعتبر الشروط هي عقل البرنامج ولذلك هي في غاية اﻷهمية
وفي هذا الدرس سنتعلم أهمية الشروط واستخداماتها وأساسياتها، وسنتعمق أكثر في المستويات التالية
أهمية واستخدامات الشروط
نحن لا نتخيل البرنامج بدون شروط، ربما سيكون كاﻹنسان بلا عقل! الشروط تمنح البرنامج القدرة على اتخاذ القرار، فبدونها سيكون البرنامج مجرد أوامر تنفذ كما هي أيا كان الموقف.
طريقة الكتابة
تستخدم الشروط بنية مختلفة من الكود ستستخدمها ﻷول مرة وهي الكتلة Block كنا تحدثنا عنها سابقاً في درس بنية الكود يمكنك الرجوع لها.
if (){
}
يتم كتابة اﻷقواس
{}
عن طريق الضغط المستمر علىShift
ثم الضغط على مفتاح الحرفج
ولكن تأكد أن اللغة التي تكتب بها اﻹنجليزية
ستلاحظ أنك عندما تكتب القوس اﻷول
{
سيقوم محرر النصوص تلقائياً بكتابة القوس الثاني لك}
ووضع مؤشر الكتابة بينهم! وهذه من مميزات محرر النصوص.
يمكنك النزول إلى سطر جديد عن طريق زر
Enter
شرح طريقة الكتابة:
if
تُكتب في بداية الشرط- بين اﻷقواس
()
يوضع الشرط - إذا كان الشرط يساوي
true
سيقوم المفسر بتنفيذ ما بين الأقواس{}
ثم يُكمل باقي الكود - إن كان الشرط يساوي
false
سيتجاهل المفسّر ما بين اﻷقواس{}
ويكمل.
بإختصار الشروط تُحدد للمفسّر كتلة من اﻷوامر يقوم بتنفيذها فقط إذا كان ما بين اﻷقواس يساوي true
وهذا من أهم استخدامات القيم المنطقية (Boolean) فالشروط تعتمد كلياً عليها، فإن كان الشرط ينتج عنه true
سيقوم المفسر بتنفيذ كتلة اﻷوامر.
لاحظ أن if
يتم كتابتها بالحروف الصغيرة، إن جربت كتابتها If
أو IF
سيعطي المفسر خطأ.
مثال بسيط:
if (5 == 5){
console.log("Dalilmobarmg");
}
قام بطباعة "Dalilmobarmg" ﻷن الشرط تحقق، وهو أن 5 تساوي 5؛ لكن لو قمت بتغيير الشرط إلى
4 == 5
لن يتحقق الشرط وبالتالي لن يطبع المفسر شيء!
كيف يتحقق المفسر من الشرط
مهم جداً معرفة كيف تعمل الشروط، ﻷن ذلك سيسهل عليك فهم الشروط وفهم الأمثلة المتقدمة منها ودروس المستويات التالية، لذلك ركز جيداً ..
يتم وضع الشرط كما ذكرنا بين ()
وأول شيء يقوم المفسر به هو تشغيل ما بين القوسين والحصول على ناتج، ثم يتحقق المفسر إذا كان هذا الناتج true
إذن الشرط تحقق ويقوم المفسر بتنفيذ كتلة اﻷوامر بين اﻷقواس {}
غير ذلك سيتجاهل الشرط تماما ويمر على الكود بعد الشرط إن كان موجوداً ليفسره.
أمثلة على الشروط:
كود الشرط | ناتج تفسير الشرط | هل يتحقق؟ |
---|---|---|
5 > 3 | true | يتحقق |
5 < 3 | false | ﻻ يتحقق |
5 == 5 | true | يتحقق |
5 == 3 | false | ﻻ يتحقق |
5 != 3 | true | يتحقق |
5 >= 5 | true | يتحقق |
"test" == "test" | true | يتحقق |
"test" != "test" | false | ﻻ يتحقق |
"left" == "right" | false | ﻻ يتحقق |
false == false | true | يتحقق |
false == true | false | ﻻ يتحقق |
true != true | false | ﻻ يتحقق |
true != false | true | يتحقق |
اﻷمثلة السابقة كانت أمثلة ثابتة، وفي الشروط لن نستخدمها ثابتة لكن غالباً سنستخدمها مع متغيرات، وبناءا على المتغير يتغير الشرط ويتنفذ الكود أو ﻻ، أمثلة:
سنفترض أن لدينا متغيرات: done = false
و n = 5
و text = "test"
كود الشرط | ناتج تفسير الشرط | هل يتحقق؟ |
---|---|---|
n > 3 | true | يتحقق |
n < 3 | false | ﻻ يتحقق |
n == 5 | true | يتحقق |
n != 3 | true | يتحقق |
text == "test" | true | يتحقق |
text != "test" | false | ﻻ يتحقق |
done | false | ﻻ يتحقق |
done == false | true | يتحقق |
done == true | false | ﻻ يتحقق |
if
الشرطية
أمثلة على يمكنك أن تضع بين اﻷقواس أي شيء يُعطى قيمة true
أو false
، فيمكنك مثلاً أن تضع قيمة منطقية مباشرة، أو تعبير مقارنة! ويمكنك أن تضع متغير.
مثال الوضع الليلي
في هذا المثال سنقوم بإنشاء متغير dark
ونرفق له فيمة إما true
أو false
ونكتب كود يطبع "الوضع الليلي يعمل" إن كانت القيمة true
var dark = true;
if (dark){
console.log("الوضع الليلي يعمل!");
}
جرب اﻵن تغيير
dark
إلىfalse
وستجد أن المفسر لا يطبع شيء! ﻷنه سيتجاهل كتلة اﻷوامر الموجودة بين اﻷقواس{}
ﻷن الشرط لم يتحقق
لاحظ أننا في المثال السابق وضعنا بين الأقواس dark
ولم نضع dark == true
وكان السبب أننا قلنا أن المفسر ينفذ ما بين اﻷقواس أولاً ويستبدله بناتجه لينظر أهو true
أم false
وبما أن المتغير قيمته تساوي true
إذن سيقوم المفسر بالتعامل معه بقيمته وهي true
إذن سيتحقق الشرط، أما لو كتبنا dark == true
سيقوم المفسر بالمقارنة ثم ينتج عن المقارنة true
ﻷنهما متساويان وأيضاً يتحقق الشرط! لكن اﻷولى أفضل للإختصار والسرعة.
ستجد هذه الطريقة متبعة بكثرة في البرامج واﻷكواد الحقيقية للمبرمجين
لنجرب نفس المثال السابق ولكن مع إضافة بسيطة، وهي أن يطبع "الوضع الليلي متوقف" إن لم يكن يعمل!
var dark = false;
if (dark){
console.log("الوضع الليلي يعمل!");
}
if (dark == false){
console.log("الوضع الليلي متوقف");
}
جرب تغيير قيمة
dark
منfalse
إلىtrue
وانظر ناتج الطباعة!
استخدمنا في الكود السابق تعبير التساوي الذي تعلمناه سابقاً في تعبيرات المقارنة
مثال أكبر من 10
في هذا المثال سنقوم بإنشاء متغير ونضع بداخله رقم، ونكتب كود يطبع "العدد أكبر من 10" إذا كان العدد فعلاً أكبر من "10"
يستخدم المثال تعبيرات المقارنة ، وتعتمد الشروط عليها بشكل كبير لذلك يُفضل مراجعة درس تعبيرات المقارنة سريعاً
var num = 15;
if (num > 10){
console.log("العدد أكبر من 10");
}
العدد أكبر من 10
جرب اﻵن تغيير قيمة المتغير
num
من15
إلى5
مثلاً، ستجد أن الكود لا يطبع شيء!
يمكنك تجربة أي مثال يدور ببالك اﻵن!
مثال مقارنة عددين
في هذا المثال سنقوم بالمقارنة بين متغيرين ونطبع قيمة المتغير اﻷكبر.
var n = 4;
var y = 2;
if (n > y){
console.log(n);
}
if (n < y){
console.log(y);
}
مثال مقارنة عددين (متقدم)
في هذا المثال سنقوم بالمقارنة بين متغيرين ونطبع اسم المتغير اﻷكبر وقيمته، وإن كانا متساويين سنطبع أنهما متساويان
var n = 4;
var y = 6;
if (n > y){
console.log("n: " + n);
}
if (n < y){
console.log("y: " + y);
}
if (n == y){
console.log("المتغيران متساويان");
}
جرب اﻵن تغيير قيم المتغير
n
واجعله مرة أكبر منy
ومره يساويه!
في أمر الطباعة اﻷول والثاني استخدمنا دمج النصوص.. (concatenation) فنقوم فيه بدمج نص مع قيمة متغير، راجع درس التعبيرات
في المثال قمنا بدمج رقم (integer) مع نص (string)، هذه العملية ممكنة ولكن هناك بعض لغات البرمجة سترفض العملية وتقول أنه لا يمكن دمج نص مع رقم، وقتها يكون الحل هو استخدام دالة تحول الرقم من رقم إلى نص، مثال: 6
إلى "6"
لكن لحسن الحظ لغة جافاسكريبت التي نستخدمها تقوم تلقائياً بتحويل الرقم إلى نص إذا دمجت بينهم لذلك سيعمل الكود بنجاح.
سندرس في المستوى المتوسط كيفية التحويل بين أنواع البيانات المختلفة.
مثال كلمة السر
لنقم بمثال أكثر واقعية، وهو أننا مثلاً لدينا برنامجاً بسيطاً يطلب كلمة سر، وللبرنامج كلمة سر واحدة لا يمكن الدخول بأي كلمة سر إلا هي، كيف ننفذ الفكرة ببساطة؟
var password = "test"; // Enter your password here
var correct_password = "12345678";
if (password == correct_password){
console.log("لقد نجحت عملية تسجيل الدخول");
}
if (password != correct_password){
console.log("كلمة السر غير صحيحة");
}
استخدمنا في أول سطر التعليقات لنضع ملحوظة أن كلمة السر يمكنك كتابتها هنا
else
استخدام في المثال السابق وفي معظم استخداماتك للشروط if
ستجد أنك تريد أن تعطي أمر بمعنى "غير ذلك"، مثلاً في المثال السابق كتبنا شرط يتحقق إن كانت كلمة السر تساوي كلمة السر الصحيحة، بعدها كنا نريد أن نقول غير ذلك لكننا نفذناها في شكل شرط أخر نقول فيه إذا كانت كلمة السر لا تساوي كلمة السر الحقيقية، ولكن هذه الطريقة غير عملية نوعاً ما، فهناك طريقة أفضل مخصصة لحل هذه المشكلة وتنفيذ ما نريد بأفضل وأسرع شكل... وهي استخدام else
.
else
طريقة كتابة if (){
}else{
}
أو:
if (){
}
else{
}
الفرق بينهم أن else
نزلت لسطر جديد، وفي معظم لغات البرمجة لا يؤثر السطر الجديد أو المسافات ولا يهتم لها المفسر.
else
؟
كيف تعمل بكل بساطة قلنا أن if
يتم تنفيذ كتلة اﻷوامر الموجودة بين القوسين {}
إذا كان الشرط true
، أما else
يتم تنفيذها إذا كان الشرط المكتوب في if
يساوي false
... فبالتالي إن كتبت else
لا بد أن يتم تنفيذ كتلة من الكتلتين، إما كتلة أوامر if
أو كتلة أوامر else
الموجودة في القوسين بعدها {}
.
لا يمكن أن تأتي else
بدون if
، ﻷنها مرتبطة بها في الشرط وفي كل شيء... ولكن يمكن أن تأتي if
بدون else
.
else
مثال على لنكتب نفس المثال السابق ونحقق نفس الناتج ولكن بشكل أفضل باستخدام شرط واحد بدون تكرار:
var password = "test"; // Enter your password here
var correct_password = "12345678";
if (password == correct_password){
console.log("لقد نجحت عملية تسجيل الدخول");
}else{
console.log("كلمة السر غير صحيحة");
}
if
تمارين على الشروط قم بكتابة كود يتحقق من هل العدد المُدخل موجب أم سالب أم صفر، ويطبع "موجب" إذا كان موجب، و"سالب" إذا كان سالب و "صفر" إذا كان صفر
قم بكتابة كود يدخل له البريد اﻹلكتروني وكلمة السر، ويطبع "تم تسجيل الدخول بنجاح" إن كان البريد اﻹلكتروني يساوي dalilmobarmg@gmail.com
وكلمة السر تساوي 123456
غير ذلك يطبع "البريد اﻹلكتروني غير صحيح" إن كان غير صحيح، أو يطبع "كلمة السر غير صحيحة" إن كانت كلمة السر غير صحيحة!
نهنئك بأن من هذه اللحظة أنت قادر على كتابة برامج بسيطة لذلك تبدأ المتعة من هنا، وسيكون هناك بعض التمرينات الممتعة والشيّقة، ستشعر ﻷول مرة أنك تستخدم ما تعلمته حقاً!
المساهمين
وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github