في لغة Dart، تُستخدم العوامل المنطقية (Logical Operators) لدمج أو تعديل الشروط المنطقية (true
أو false
). تُستخدم هذه العوامل بكثرة مع الشروط (if
، while
، for
) لاتخاذ قرارات معقدة. إليك شرح مفصل مع أمثلة:
العوامل المنطقية الأساسية:
1. &&
(AND – و)
الشرط: يعيد true
فقط إذا كانت كلا الشرطين صحيحين.
مثال:
dart
Copy
bool a = true;
bool b = false;
print(a && b); // الناتج: false (لأن أحدهما false)
print(5 > 3 && "Dart" == "Dart"); // الناتج: true (كلاهما صحيح)
2. ||
(OR – أو)
الشرط: يعيد true
إذا كان أحد الشرطين على الأقل صحيحًا.
مثال:
dart
Copy
bool isRaining = true;
bool hasUmbrella = false;
print(isRaining || hasUmbrella); // الناتج: true (لأن isRaining صحيح)
print(2 < 1 || 5 == 5); // الناتج: true (الشرط الثاني صحيح)
3. !
(NOT – نفي)
الشرط: يعكس قيمة الشرط (true
→ false
والعكس).
مثال:
dart
Copy
bool isLogged = false;
print(!isLogged); // الناتج: true (نفي false)
print(!(10 == 10)); // الناتج: false (نفي true)
أمثلة عملية مع الشروط (if
):
مثال 1: التحقق من مدخلات المستخدم
dart
Copy
String username = "admin";
String password = "12345";
if (username == "admin" && password == "12345") {
print("Login successful!");
} else {
print("Invalid credentials!");
}
// الناتج: Login successful!
مثال 2: تحديد فئة عمرية
dart
Copy
int age = 25;
bool hasLicense = true;
if (age >= 18 && hasLicense) {
print("You can drive.");
} else {
print("You cannot drive.");
}
// الناتج: You can drive.
مثال 3: التحقق من نطاق رقم
dart
Copy
int number = 42;
if (number < 0 || number > 100) {
print("الرقم خارج النطاق المسموح!");
} else {
print("الرقم ضمن النطاق.");
}
// الناتج: الرقم ضمن النطاق.
تقييم الدائرة القصيرة (Short-Circuit Evaluation)
- في
&&
: إذا كان الشرط الأول false، لا يتم تقييم الشرط الثاني (لأن النتيجة ستكونfalse
مهما كان). - في
||
: إذا كان الشرط الأول true، لا يتم تقييم الشرط الثاني (لأن النتيجة ستكونtrue
مهما كان).
مثال:
dart
Copy
bool checkCondition() {
print("تم التنفيذ!");
return true;
}
print(false && checkCondition()); // الناتج: false ← لا يُنفّذ checkCondition()
print(true || checkCondition()); // الناتج: true ← لا يُنفّذ checkCondition()
الأولوية (Operator Precedence)
!
(NOT) ← أعلى أولوية.&&
(AND) ← ثانيًا.||
(OR) ← أقل أولوية.
مثال:
dart
Copy
bool x = true;
bool y = false;
bool z = true;
print(x || y && z); // تُفسّر كـ x || (y && z) → true || (false) → true
print((x || y) && z); // تُفسّر كـ (true) && true → true
ملاحظات مهمة:
- النوع (
Type
) ضروري:- العوامل المنطقية تعمل فقط مع قيم من نوع
bool
. - خطأ شائع:dartCopyint number = 5; if (number) { … } // خطأ! يجب أن تكون الشروط منطقية (مثل number > 0).
- العوامل المنطقية تعمل فقط مع قيم من نوع
- استخدام الأقواس للوضوح:dartCopyif ((age > 18 && hasLicense) || isParentWithChild) { … }
- النفي (
!
) مع الأقواس:dartCopyprint(!(a && b)); // صحيح: نفي النتيجة الكلية لـ (a && b)
فوائد العوامل المنطقية:
- تبسيط الشروط المعقدة.
- تحسين كفاءة الكود عبر التقييم القصير.
- زيادة قابلية القراءة.