ما هي switch case
؟
switch
تستخدم لاختبار متغير معيّن مع عدة قيم محتملة، بدل كتابة if else if else
متكررة، فتجعل الكود أنظف وأسهل قراءة.
1. البنية الأساسية لـ Switch Case
switch (variable) {
case value1:
// كود يتم تنفيذه إذا كانت variable تساوي value1
break;
case value2:
// كود يتم تنفيذه إذا كانت variable تساوي value2
break;
default:
// كود يتم تنفيذه إذا لم تطابق أي حالة
}
Dart✅ ملاحظة:
break
ضروري بعد كل حالة حتى يمنع الاستمرار للحالة التالية.default
اختياري، يستخدم إذا لم تتطابق أي حالة.
مثال أساسي:
String day = "Monday";
switch (day) {
case "Monday":
print("اليوم هو الإثنين");
break;
case "Tuesday":
print("اليوم هو الثلاثاء");
break;
default:
print("يوم آخر");
}
Dartمثال 2:
void main() {
int number = 2;
switch (number) {
case 1:
print('الرقم هو 1');
break;
case 2:
print('الرقم هو 2');
break;
case 3:
print('الرقم هو 3');
break;
default:
print('رقم غير معروف');
}
}
Dartمثال لاستخدام أكثر من حالة لنفس النتيجة:
void main() {
String letter = 'A';
switch (letter) {
case 'A':
case 'a':
print('الحرف هو A أو a');
break;
case 'B':
case 'b':
print('الحرف هو B أو b');
break;
default:
print('حرف آخر');
}
}
Dartالمثال 1: فصول السنة
int month = 3;
switch (month) {
case 12:
case 1:
case 2:
print("الشتاء");
break;
case 3:
case 4:
case 5:
print("الربيع");
break;
case 6:
case 7:
case 8:
print("الصيف");
break;
case 9:
case 10:
case 11:
print("الخريف");
break;
default:
print("رقم شهر غير صالح");
}
Dart2. الفروق المهمة بين if و switch
الميزة | if-else | switch-case |
---|---|---|
الاستخدام | شروط معقدة ومتنوعة | مقارنة بقيم ثابتة محددة |
الأداء | أبطأ مع الشروط الكثيرة | أسرع مع الحالات الكثيرة |
المقارنة | تعابير شرطية معقدة | مقارنة بقيم مباشرة |
التنفيذ | يفحص الشروط بالتسلسل | يقفز مباشرة للحالة المطابقة |
المثال 1: حاسبة بسيطة
String operation = "+";
double num1 = 10;
double num2 = 5;
switch (operation) {
case "+":
print(num1 + num2);
break;
case "-":
print(num1 - num2);
break;
case "*":
print(num1 * num2);
break;
case "/":
print(num1 / num2);
break;
default:
print("عملية غير صالحة");
}
Dartالمثال 2: حجم الملابس
String size = "XL";
switch (size) {
case "XS":
print("الحجم صغير جداً");
break;
case "S":
print("الحجم صغير");
break;
case "M":
print("الحجم متوسط");
break;
case "L":
print("الحجم كبير");
break;
case "XL":
print("الحجم كبير جداً");
break;
default:
print("الحجم غير معروف");
}
Dartالمثال 2: تقييم الدرجات
String grade = "B";
switch (grade) {
case "A":
print("ممتاز");
break;
case "B":
print("جيد جداً");
break;
case "C":
print("جيد");
break;
case "D":
print("مقبول");
break;
case "F":
print("راسب");
break;
default:
print("تقييم غير معروف");
}
Dart4. استخدام Switch مع Enum
enum Color { red, green, blue }
void main() {
Color favorite = Color.blue;
switch (favorite) {
case Color.red:
print("اللون الأحمر");
break;
case Color.green:
print("اللون الأخضر");
break;
case Color.blue:
print("اللون الأزرق"); // سيتم تنفيذ هذا
break;
}
}
Dart5. Switch مع القيم الرقمية
int number = 2;
switch (number) {
case 1:
print("واحد");
break;
case 2:
print("اثنان"); // سيتم تنفيذ هذا
break;
case 3:
print("ثلاثة");
break;
default:
print("رقم آخر");
}
Dart6. Switch مع المدخلات من المستخدم
import 'dart:io';
void main() {
print("أدخل لونك المفضل (red, green, blue):");
String? color = stdin.readLineSync();
switch (color?.toLowerCase()) {
case "red":
print("اخترت الأحمر");
break;
case "green":
print("اخترت الأخضر");
break;
case "blue":
print("اخترت الأزرق");
break;
default:
print("لون غير معروف");
}
}
Dart7. نصائح مهمة عند استخدام Switch
- لا تنسى
break
:- بدونها سيستمر التنفيذ للحالات التالية (تسلسل الحالات)
- استخدم
default
: - للتعامل مع القيم غير المتوقعة
- يمكن استخدام
continue
مع label:- للانتقال إلى حالة معينة
- المقارنة تكون بـ
==
:- لا يمكن استخدام شروط معقدة داخل case
- يُفضل مع القيم الثابتة:
- ليس للشروط الديناميكية المعقدة
8. الفرق بين Dart والإصدارات الحديثة (Dart 3.0+)
في Dart 3.0 أصبح Switch أكثر قوة مع:
- دعم Pattern Matching
- عدم الحاجة لـ
break
في بعض الحالات - دعم الـ Exhaustiveness checking مع enum
مثال Dart 3.0:
هذا الأسلوب الجديد موجود في Dart 3، ويسمى Switch Expressions أو Switch with Arrow Syntax.
var x = 1;
switch (x) {
case 1 => print('one'); // => بدل break
case 2 => print('two');
default => print('other');
}
DartString weather = 'rainy';
switch (weather) {
case 'sunny' => print('الجو مشمس');
case 'rainy' => print('الجو ممطر');
default => print('جو غير معروف');
}
Dartالفرق بين الأسلوب العادي وهذا الجديد:
- بدل ما تكتب
{}
معbreak
في كل حالة… - تستخدم السهم
=>
مباشرة لكتابة النتيجة أو الأمر. - الكود يصبح أنظف وأقصر!
ولا تحتاج تكتب break
يدويًا — Dart تفهم تلقائيًا أن كل حالة مستقلة.
ملاحظة مهمة:
- هذه الكتابة تحتاج أن تكون لغة Dart عندك حديثة (Dart 3 أو أحدث).
- إذا كنت تستخدم Flutter، تأكد أن نسخة Dart حديثة حتى لا يظهر لك أخطاء.
9. متى تستخدم Switch بدلاً من if؟
- عندما يكون لديك متغير واحد تختبر قيمته المختلفة
- عندما يكون لديك أكثر من 3 حالات ثابتة
- عندما تريد كودًا أنظف وأسهل في القراءة
الخلاصة
switch
مثالي للمقارنة بقيم ثابتة- أكثر تنظيماً من
if
متعددة للحالات الكثيرة - أسرع في التنفيذ للحالات الكثيرة
- يتطلب
break
إلا في حالات خاصة default
مهمة للقيم غير المتوقعة
كيف نستخدم switch
لإرجاع قيمة مباشرة؟
void main() {
var grade = 'A';
var message = switch (grade) {
'A' => 'ممتاز',
'B' => 'جيد جدًا',
'C' => 'جيد',
'D' => 'مقبول',
_ => 'راسب', // _ تعني أي شيء آخر (بدل default)
};
print(message);
}
Dartخلاصة الفرق:
الطريقة | بدون تعبير | مع تعبير (switch expression) |
---|---|---|
تستخدم case و break | نعم | لا |
ترجع قيمة مباشرة | لا | نعم |
أقصر وأوضح | لا | نعم |