ما هي 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 | نعم | لا |
| ترجع قيمة مباشرة | لا | نعم |
| أقصر وأوضح | لا | نعم |