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

قام بطباعة "Dalilmobarmg" ﻷن الشرط تحقق، وهو أن 5 تساوي 5؛ لكن لو قمت بتغيير الشرط إلى 4 == 5 لن يتحقق الشرط وبالتالي لن يطبع المفسر شيء!

كيف يتحقق المفسر من الشرط

مهم جداً معرفة كيف تعمل الشروط، ﻷن ذلك سيسهل عليك فهم الشروط وفهم الأمثلة المتقدمة منها ودروس المستويات التالية، لذلك ركز جيداً ..

يتم وضع الشرط كما ذكرنا بين () وأول شيء يقوم المفسر به هو تشغيل ما بين القوسين والحصول على ناتج، ثم يتحقق المفسر إذا كان هذا الناتج true إذن الشرط تحقق ويقوم المفسر بتنفيذ كتلة اﻷوامر بين اﻷقواس {} غير ذلك سيتجاهل الشرط تماما ويمر على الكود بعد الشرط إن كان موجوداً ليفسره.

أمثلة على الشروط:

كود الشرطناتج تفسير الشرطهل يتحقق؟
5 > 3trueيتحقق
5 < 3falseﻻ يتحقق
5 == 5trueيتحقق
5 == 3falseﻻ يتحقق
5 != 3trueيتحقق
5 >= 5trueيتحقق
"test" == "test"trueيتحقق
"test" != "test"falseﻻ يتحقق
"left" == "right"falseﻻ يتحقق
false == falsetrueيتحقق
false == truefalseﻻ يتحقق
true != truefalseﻻ يتحقق
true != falsetrueيتحقق

اﻷمثلة السابقة كانت أمثلة ثابتة، وفي الشروط لن نستخدمها ثابتة لكن غالباً سنستخدمها مع متغيرات، وبناءا على المتغير يتغير الشرط ويتنفذ الكود أو ﻻ، أمثلة:

سنفترض أن لدينا متغيرات: done = false و n = 5 و text = "test"

كود الشرطناتج تفسير الشرطهل يتحقق؟
n > 3trueيتحقق
n < 3falseﻻ يتحقق
n == 5trueيتحقق
n != 3trueيتحقق
text == "test"trueيتحقق
text != "test"falseﻻ يتحقق
donefalseﻻ يتحقق
done == falsetrueيتحقق
done == truefalseﻻ يتحقق

أمثلة على 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);
}
ناتج التشغيل 4

مثال مقارنة عددين (متقدم)

في هذا المثال سنقوم بالمقارنة بين متغيرين ونطبع اسم المتغير اﻷكبر وقيمته، وإن كانا متساويين سنطبع أنهما متساويان

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("المتغيران متساويان");
}
ناتج التشغيل y: 6

جرب اﻵن تغيير قيم المتغير 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