مشغلات المقارنة والمشغلات المنطقية في C#
ما هذا ولماذا؟
تخيل أنك تلعب لعبة كمبيوتر. لتجاوز المستوى، تحتاج إلى التحقق من شروط مختلفة: "إذا كان لدى البطل أقل من 10 نقاط حياة، فعِّل الحماية" أو "إذا ضغط اللاعب على الزر و جمع كل العملات، افتح الباب".
في البرمجة، تقوم عوامل المقارنة والعوامل المنطقية بهذه التحققات. فهي تساعد البرنامج على "التفكير" واتخاذ القرارات. بدونها، سيكون الكود مجرد قائمة من الأوامر التي تُنفَّذ دائمًا بنفس الطريقة، أما معها فيمكن للبرنامج التفاعل مع مواقف مختلفة.
على سبيل المثال، تكتب آلة حاسبة للدرجات. إذا حصل الطالب على أكثر من 90 نقطة — "ممتاز"، وإذا حصل على أقل من 50 — "ضعيف". أو تتحقق مما إذا كان المستخدم يمكنه تسجيل الدخول إلى النظام: إذا كانت كلمة المرور صحيحة و الحساب غير محظور — اسمح له بالدخول.
تقارن عوامل المقارنة الأرقام أو النصوص. بينما تربط العوامل المنطقية عدة شروط في شرط واحد. معًا، هما أساس أي كود "ذكي".
الصيغة وأمثلة الكود
في لغة C#، تبدو عوامل المقارنة كالتالي:
==— يساوي (انتبه: علامتا يساوي، وليس واحدة!)!=— لا يساوي>— أكبر من<— أصغر من>=— أكبر من أو يساوي<=— أصغر من أو يساوي
العوامل المنطقية:
&&— و (كلا الشرطين يجب أن يكونا صحيحين)||— أو (شرط واحد على الأقل صحيح)!— ليس (يغير الصحيح إلى خطأ والعكس)
نتيجة المقارنة هي دائمًا true (صحيح) أو false (خطأ).
مثال 1: التحقق من العمر
int age = 14;
bool canDrive = age >= 18; // false, لأن 14 أصغر من 18
if (canDrive)
{
Console.WriteLine("يمكنك قيادة السيارة!");
}
else
{
Console.WriteLine("كبر قليلاً."); // سيتم تنفيذ هذا
}
// الشرح:
// age >= 18 — هذه مقارنة. نتيجتها false.
// if يتحقق من true/false. إذا كان true ينفذ الكتلة الأولى، إذا كان false ينفذ الثانية.
مثال 2: التحقق من اسم المستخدم وكلمة المرور
string login = "user123";
string password = "qwerty";
// نتحقق من أن اسم المستخدم يساوي "admin" وكلمة المرور تساوي "12345"
if (login == "admin" && password == "12345")
{
Console.WriteLine("مرحبًا أيها المسؤول!");
}
else
{
Console.WriteLine("اسم المستخدم أو كلمة المرور غير صحيحة.");
}
// الشرح:
// && تعني "و". يجب أن يكون كلا الشرطين true.
// login == "admin" — false (لأن login = "user123")
// إذن الشرط بأكمله false — نذهب إلى else.
مثال 3: خصم للطلاب أو المتقاعدين
int age = 20;
bool isStudent = true;
// خصم إذا كان العمر أقل من 18 أو كان الشخص طالبًا
if (age < 18 || isStudent)
{
Console.WriteLine("خصم 50%!");
}
else
{
Console.WriteLine("السعر الكامل.");
}
// الشرح:
// || تعني "أو". يكفي شرط واحد true.
// age < 18 — false (20 ليست أقل من 18)
// isStudent — true
// إذن الشرط true — يتم منح الخصم.
مثال 4: التحقق من أن الرقم لا يساوي صفرًا
int number = 7;
if (number != 0)
{
Console.WriteLine("الرقم ليس صفرًا، يمكن القسمة.");
}
else
{
Console.WriteLine("لا يمكن القسمة على صفر!");
}
// الشرح:
// != تتحقق من "لا يساوي".
// 7 != 0 — هذا true، لذلك يتم تنفيذ الكتلة الأولى.
مثال 5: شرط معقد مع "ليس"
bool isRaining = false;
bool hasUmbrella = true;
// إذا لم يكن الجو ممطرًا أو كان هناك مظلة — يمكننا الخروج
if (!isRaining || hasUmbrella)
{
Console.WriteLine("نذهب للتنزه!");
}
else
{
Console.WriteLine("نجلس في المنزل.");
}
// الشرح:
// !isRaining — هذا "ليس isRaining". isRaining = false، إذن !false = true.
// true || true = true — نتنزه.
// إذا كان isRaining = true و hasUmbrella = false، فإن !true = false، false || false = false — نجلس في المنزل.
المقارنة مع Python
في Python، تبدو نفس العوامل متشابهة تقريبًا، لكن هناك بعض الاختلافات:
- بدلاً من
&&يُكتبand - بدلاً من
||يُكتبor - بدلاً من
!يُكتبnot - عوامل المقارنة هي نفسها:
==,!=,>,<,>=,<=
مثال بلغة Python (نفس المثال في C#):
age = 14
can_drive = age >= 18 # False
if can_drive:
print("يمكنك قيادة السيارة!")
else:
print("كبر قليلاً.")
# العوامل المنطقية:
login = "user123"
password = "qwerty"
if login == "admin" and password == "12345":
print("مرحبًا أيها المسؤول!")
else:
print("اسم المستخدم أو كلمة المرور غير صحيحة.")
الفرق الرئيسي: في C# العوامل المنطقية هي رموز (&&, ||, !)، بينما في Python هي كلمات (and, or, not). فيما عدا ذلك، المنطق هو نفسه.
الأخطاء النموذجية للمبتدئين
-
الخلط بين = و ==
=— هذا هو الإسناد (وضع قيمة في متغير).
==— هذه هي المقارنة (التحقق مما إذا كانت القيم متساوية).
خطأ:if (age = 18)— هذا غير مسموح! يجبif (age == 18). -
نسيان أولوية العمليات
يتم تنفيذ المقارنات أولاً، ثم العوامل المنطقية. لكن من الأفضل استخدام الأقواس للوضوح.
مثال:if (age > 18 && name == "Tom" || score > 100)— غير واضح ما المقصود. الصحيح:if ((age > 18 && name == "Tom") || score > 100). -
الخلط بين && و ||
&&يتطلب أن تكون جميع الشروط صحيحة، بينما||يكفي أن يكون شرط واحد صحيحًا.