أريد فهم switch في javascript من فضلكم

السلام عليكم

أنا أتعلم javascript, ولم أفهم ما هو switch بالضبط.

مثلا في الكود التالي المقتبس لغرض التعلم من موقع (المعهد العربي لتعلم لغات البرمجة):

```

<script type="text/javascript">

var d=new Date();

var theDay=d.getDay();

switch (theDay)

{

case 5:

document.write("وأخيراً يوم الجمعة");

break;

case 7:

document.write("السبت هو بداية يوم العمل");

break;

case 0:

document.write("الأحد يوم آخر من العمل");

break;

default:

document.write("إنني بانتظار يوم العطلة");

}

</script>

```

على أي أساس يتم طباعة عبارة يوم الجمعة في case5؟

يعني لماذا لو جعلتها case6 والتي بعدها 7 وشغلت الكود تظهر عبارة default?

لم أفهم طريقة عملها.

فهل منكم من يشرحها وياريت لو بأمثلة مع الشرح.

شكرا.

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

Mohammed_Fahmy3 أضف ردا

سوف أوضح كيفية عمل switch من خلال مثال من موسوعة حسوب (سوف أضع رابط الموسوعة و أخر التعليق).

في المثال الآتي، إذا كانت قيمة التعبير expr تساوي Bananas، فسيُطابِق البرنامج الحالة Bananas وسيُنفِّذ التعابير البرمجية المرتبطة معها، وعند تنفيذ التعبير break فسيخرج البرنامج من switch ثم يُنفِّذ التعابير البرمجية التي تلي switch، وإذا حُذِفَ التعبير break فستُنفَّذ التعابير المرتبطة مع الحالة Cherries أيضًا:
switch (expr) {
  case 'Oranges':
    console.log('Oranges are $0.59 a pound.');
    break;
  case 'Apples':
    console.log('Apples are $0.32 a pound.');
    break;
  case 'Bananas':
    console.log('Bananas are $0.48 a pound.');
    break;
  case 'Cherries':
    console.log('Cherries are $3.00 a pound.');
    break;
  case 'Mangoes':
    console.log('Mangoes and papayas are $2.79 a pound.');
    break;
  default:
    console.log('Sorry, we are out of ' + expr + '.');
}

في البداية دعنا نوضح أن الدلة switch مثل الدالة if بمعني أنها تعتبر مجموعة من الدالة if مجتمعه في دالة واحدة.

كما في المثال السابق إذا كانت قيمة المتغير expr تطابق أي من الحالات cases فسوف يتم تنفيذ الكود الخاص بهذه الحالة.

ونقوم بوضع break في نهاية كل حالة حتي نقوم بأغلاق switch بعد تطبيق كود هذه الحالة case.

____________________

على أي أساس يتم طباعة عبارة يوم الجمعة في case5؟

لاحظ أنك في هذا الكود كتبت إذا كانت قيمة المتغير theDay تساوي 5 قم بطباعة "وأخيراً يوم الجمعة".

switch (theDay)

{
// في حالة كانت قيمة المتغير theDay تساوي 5
case 5:
// سوف يتم تشغيل هذا الكود
document.write("وأخيراً يوم الجمعة");

break;
يعني لماذا لو جعلتها case6 والتي بعدها 7 وشغلت الكود تظهر عبارة default?

الحالة الوحيدة التي سوف يتم تنفيذ فيها العبارة default إذا كانت جميع الحلات لا تساوي قيمة الشرط, ظعنا نوضح ذلك من خلال مثالك.

لنفترض أنني قمت بتغير قيمة الشرط في الدالة switch وجعلتها 9 وثمت بتشغيل الدالة ماذا سوف تكون النتبيجة دعنا نوضح كيف سوف تعمل الدالة.

  1. تقوم بتحديد قيمة الشرط(9)
  2. تقارن قيمة الشرط مع كل الحالات cases
  3. ولن تجد أي حالة لها نفس القيمة لذلك سوف تقوم بتنفيذ الكود الخاص بال الحالة default
default:
   document.write("إنني بانتظار يوم العطلة");

4.وبعدها سوف يتم إغلاق الدلة switch

___________

حاولت أن أفهم, ولكنني عندما طبقت استغربت أكثر.

لماذا هذا الكود يطبع default?

```

let fruits = ['banana', 'orange']

switch (fruits) {

case 'banana':

console.log('bananas');

break;

case 'orange':

console.log('oranges');

break;

default:

console.log('just a test');

}

```

من الطبيعي أن يتم طباعة ال default وذلك لأنك تقوم بإضافة مصفوفة بداخل ال switch  وذلك غير صحيح لأن التحقق يتم على عنصر واحد فمثلاً يتم إضافة عنصر واحد مثل orange فقط وتقوم بواسطة ال case بالتحقق منه لذلك حتى يكون المثال الخاص بك صحيح يجب أن يكون كالتالي

let fruit = 'orange'
switch (fruit) {
case 'banana':
console.log('bananas');
break;
case 'orange':
console.log('oranges');
break;
default:
console.log('just a test');
}

وسوف يتم طباعة oranges في المثال السابق

ولكن إذا أردت تنفيذ الكود الخاص بك فيجب عليك القيام بإضافة loop لتنفيذ ال switch  مرتين الأولى orange والثانية banana كالتالي

let fruits = ['banana', 'orange']
for (i = 0; i < fruits.length; i++) {  
  switch (fruits[i]) {
  case 'banana':
  console.log('bananas');
  break;
  case 'orange':
  console.log('oranges');
  break;
  default:
  console.log('just a test');
  }
}

شكرا لقد فهمت بعد الكثير من التطبيق

هذا بسبب أن المتغير fruits لا يساوي banana أو oranges لذلك سوف يطبع البرنامج قيمة default.

لذلك حتي يعمل معك الكود السابق بشكل صحيح يجب أن تكون قيمة المتغير fruits عبارة عن أحدي القيم في هذه المصفوفة ويمكنك فعل ذلك من خلال وضع فهرس index المصفوفة بين القوسين [] حتي تقوم بتحدد عنصر واحد فقط من المصفوفة هكذا.

let fruits = ['banana', 'orange']

switch (fruits[0]) {

case 'banana':

console.log('bananas');

break;

case 'orange':

console.log('oranges');

break;

default:

console.log('just a test');

}

قيمة المتغير fruits في هذه الحلة سوف تساوي "banana" لذلك سوف يتم طباعة "bananas".

وظيفة (function) الـ switch بالبرمجة هي نفسها وظيفة أي switch كزرار أو مجموعة زراير يمكنك فتح وغلق أو دعنا نقول "اختيار" زرار يكون الذي يشتغل من دون الأزرار الأخرى.

في الحالة التي عندك هو يأخذ الرقم (integer سماه theDay) من method (or class) سماه بحرف الـ "d" ونداها (أو نادى الجزئية الخاصة بحساب تاريخ اليوم getDay بأول البرنامج هنا.

ثم هو بنى (/جهّز/ركّب) الـ switch هنا ليكون فيه 3 خيارات وحسب وإلا ينادي الـ default:

إذا "5" يبقى اليوم الجمعة أجازة أخيرا! (الراجل يبدو لا يحب عمله فينتظر يوم الأجازة بفارغ الصبر هكذا)

وإذا "7" يبقى يوم السبت العودة للعمل الذي لا يحبه.

وإذا "0" يبقى يوم آخر من العمل (ثاني أيام أسبوع العمل بالنسبة لديه)

وهكذا تمر الأيام عليه فجعل لها الـ "default" (يعني بقية الأرقام الأخرى التي ترجع من الـ method المناداة الخاصة ببقية أيام الأسبوع) يعرض أو يعبر عن حالته أنه "لا يزال ينتظر الـ weekend.

____________

لاحظ هنا أن الأرقام بالـ cases للـ switch هكذا (5، 7، 0،...) هي حسب بناء الـd.getDay هناك. (إذا أردت تغييرها مثلا لتناظر أيام الأسبوع السبعة 1-2-3-4-5-6-7 فعليك أن تغيرها هناك وليس بالـ switch هنا.

يعني إذا أضفت case 6 هنا كما تساءلت فلن يشغلها الـ switch إلا إذا كانت "6" تنتج من أحد أيام الأسبوع هنا في d.getDay (وغالبا "6" هناك يعبر عن الأيام التي بوسط أسبوع العمل فستمر من خلال الـ default هكذا)

(إذا الشرح ليس بواضح لك خذ راحتك بالمزيد من الاستفسار والأسئلة بإذن الله)

حاولت أن أفهم, ولكنني عندما طبقت استغربت أكثر.

لماذا هذا الكود يطبع default?

```

let fruits = ['banana', 'orange']

switch (fruits) {

case 'banana':

console.log('bananas');

break;

case 'orange':

console.log('oranges');

break;

default:

console.log('just a test');

}

```

ZEZOEKHTRUTO
  • حذف بواسطة المشرف