C#: العمليات والتعبيرات
1. العوامل الحسابية
تُجري العوامل الحسابية العمليات الحسابية الأساسية، بما في ذلك الجمع والطرح والضرب والقسمة وعملية حساب المودولوس.
| المشغل | الاسم | مثال | النتيجة |
|---|---|---|---|
+ |
إضافة | 5 + 3 |
8 |
- |
الطرح | 5 - 3 |
2 |
* |
الضرب | 5 * 3 |
15 |
/ |
القسم | 7 / 2 |
3 |
% |
المودولوس | 7 % 2 |
1 |
تحذير: القسمة الصحيحة تؤدي إلى اقتطاع الجزء العشري. ينتج عن
7 / 2النتيجة3، وليس3.5. للحصول على نتيجة ذات عدد عائم، يجب أن يكون أحد المعاملين على الأقل من النوع العائم، على سبيل المثال، ينتج عن7.0 / 2النتيجة3.5.
▶ مثال
using System;
class Program
{
static void Main()
{
int a = 17, b = 5;
Console.WriteLine($"Addition: {a} + {b} = {a + b}");
Console.WriteLine($"Subtraction: {a} - {b} = {a - b}");
Console.WriteLine($"Multiplication: {a} * {b} = {a * b}");
Console.WriteLine($"Integer division: {a} / {b} = {a / b}");
Console.WriteLine($"Floating-point division: {a * 1.0} / {b} = {a * 1.0 / b}");
Console.WriteLine($"Modulus: {a} % {b} = {a % b}");
}
}
Addition: 17 + 5 = 22
Subtraction: 17 - 5 = 12
Multiplication: 17 * 5 = 85
Integer division: 17 / 5 = 3
Floating-point division: 17 / 5 = 3.4
Modulus: 17 % 5 = 2
2. عوامل الزيادة والنقصان
تعمل علامتا الزيادة ++ والنقصان -- على زيادة أو تقليل قيمة المتغير بمقدار 1. حيث يقوم الشكل المسبق بتعديل القيمة قبل استخدامها؛ بينما يستخدم الشكل اللاحق القيمة أولاً، ثم يقوم بتعديلها.
| المشغل | الاسم | الوصف |
|---|---|---|
++x |
زيادة البادئة | زيادة بمقدار 1، ثم استخدام القيمة |
x++ |
الزيادة اللاحقة | استخدم القيمة، ثم أضف إليها 1 |
--x |
التخفيض المسبق | التخفيض بمقدار 1، ثم استخدام القيمة |
x-- |
التخفيض اللاحق | استخدم القيمة، ثم قم بتخفيضها بمقدار 1 |
▶ مثال
using System;
class Program
{
static void Main()
{
int x = 10;
int y = 10;
Console.WriteLine($"Prefix increment: ++x = {++x}, x = {x}");
Console.WriteLine($"Postfix increment: y++ = {y++}, y = {y}");
int m = 5;
int n = 5;
Console.WriteLine($"Prefix decrement: --m = {--m}, m = {m}");
Console.WriteLine($"Postfix decrement: n-- = {n--}, n = {n}");
}
}
Prefix increment: ++x = 11, x = 11
Postfix increment: y++ = 10, y = 11
Prefix decrement: --m = 4, m = 4
Postfix decrement: n-- = 5, n = 4
3. عوامل العلاقة
تقوم العوامل العلائقية بمقارنة قيمتين وتُرجع نتيجة bool (true أو false).
| المشغل | الاسم | مثال | النتيجة |
|---|---|---|---|
== |
يساوي | 5 == 5 |
true |
!= |
لا يساوي | 5 != 3 |
true |
< |
أقل من | 3 < 5 |
true |
> |
أكبر من | 5 > 3 |
true |
<= |
أقل من أو يساوي | 5 <= 5 |
true |
>= |
أكبر من أو يساوي | 5 >= 6 |
false |
نصيحة: لا تخلط بين
=(التعيين) و==(التحقق من المساواة). يؤدي استخدام=في شرطifإلى حدوث خطأ في التحويل البرمجي أو خطأ منطقي.
4. العوامل المنطقية
تعمل العوامل المنطقية على دمج التعبيرات المنطقية. تستخدم لغة C# && و|| مع التقييم المختصر، مما يعني أنه لا يتم تقييم المعامل الثاني عندما تكون النتيجة قد تحددت بالفعل.
| المشغل | الاسم | مثال | الوصف |
|---|---|---|---|
&& |
«AND» المنطقي | a && b |
صحيح إذا كان كلاهما صحيحًا (دائرة قصيرة) |
| ` | ` | «أو» المنطقي | |
! |
النفي المنطقي | !a |
ينفي القيمة |
تحذير: استخدم
&&و||للعمليات المنطقية في لغة C#، وليس&و|. فهذه الأخيرة هي عوامل عملية بتية يمكنها أيضًا العمل على القيم المنطقية، لكنها لا تعمل بنظام القصر.
▶ مثال
using System;
class Program
{
static void Main()
{
int age = 25;
bool hasLicense = true;
bool canDrive = age >= 18 && hasLicense;
Console.WriteLine($"Can drive: {canDrive}");
bool isWeekend = false;
bool isHoliday = true;
bool dayOff = isWeekend || isHoliday;
Console.WriteLine($"Day off: {dayOff}");
bool isRaining = true;
Console.WriteLine($"Not raining: {!isRaining}");
}
}
Can drive: True
Day off: True
Not raining: False
5. عوامل التعيين
تقوم علامات التعيين بتعيين قيم للمتغيرات. أما علامات التعيين المركبة، فهي تجمع بين عملية حسابية وعملية تعيين في خطوة واحدة.
| المشغل | المكافئ | مثال |
|---|---|---|
= |
x = 10 |
|
+= |
x = x + y |
x += 5 |
-= |
x = x - y |
x -= 3 |
*= |
x = x * y |
x *= 2 |
/= |
x = x / y |
x /= 4 |
%= |
x = x % y |
x %= 3 |
6. عامل الشرط
المُشغِّل الشرطي ?: هو المُشغِّل الثلاثي الوحيد في لغة C#. وهو يُرجع إحدى قيمتين بناءً على شرط ما.
الصيغة: condition ? valueIfTrue : valueIfFalse
▶ مثال
using System;
class Program
{
static void Main()
{
int score = 72;
string result = score >= 60 ? "Pass" : "Fail";
Console.WriteLine($"Score {score}: {result}");
int a = 15, b = 9;
int max = a > b ? a : b;
Console.WriteLine($"Larger value: {max}");
}
}
Score 72: Pass
Larger value: 15
7. عامل دمج القيم الفارغة
يعيد عامل ?? المعامل الأيمن عندما يكون المعامل الأيسر هو null؛ وإلا، فإنه يعيد القيمة اليسرى. المُشغِّل ??= (C# 8) هو مُشغِّل التعيين الذي يدمج القيمة الفارغة، والذي يقوم بتعيين قيمة فقط عندما تكون المتغير فارغًا.
using System;
class Program
{
static void Main()
{
string name = null;
string display = name ?? "Anonymous";
Console.WriteLine($"Name: {display}");
int? count = null;
int total = count ?? 0;
Console.WriteLine($"Total: {total}");
string title = null;
title ??= "Default Title";
Console.WriteLine($"Title: {title}");
title ??= "New Title";
Console.WriteLine($"Title: {title}");
}
}
Name: Anonymous
Total: 0
Title: Default Title
Title: Default Title
8. عامل الشرط الصفر
يقوم المشغل ?. بالتحقق مما إذا كان الكائن «null» قبل الوصول إلى أحد العناصر التابعة له. إذا كان الكائن «null»، فإن التعبير يُرجع «null» بدلاً من إلقاء استثناء NullReferenceException.
using System;
class Program
{
static void Main()
{
string text = "Hello C#";
Console.WriteLine($"Length: {text?.Length}");
text = null;
Console.WriteLine($"Length: {text?.Length}");
int? len = text?.Length;
Console.WriteLine($"Type: {len?.GetType().Name ?? "null"}");
}
}
Length: 8
Length:
Type: null
9. أولوية العمليات الحسابية
يُدرج الجدول أدناه العوامل الحسابية الشائعة في لغة C# مرتبةً من الأعلى إلى الأدنى حسب الأسبقية. وتتمتع العوامل الحسابية الموجودة في نفس الصف بنفس الأسبقية.
| الأولوية | المشغلون | الوصف |
|---|---|---|
| 1 | x++ x-- . ?. () [] |
Postfix، وصول الأعضاء |
| 2 | ++x --x +x -x ! ~ |
البادئة، أحادية |
| 3 | * / % |
الضرب |
| 4 | + - |
مادة مضافة |
| 5 | < > <= >= is as |
علاقاتية، التحقق من النوع |
| 6 | == != |
المساواة |
| 7 | && |
«AND» المنطقي |
| 8 | ` | |
| 9 | ?? ??= |
دمج القيم الفارغة |
| 10 | ?: |
مشروط |
| 11 | = += -= *= /= %= إلخ. |
المهمة |
نصيحة: إذا كنت في شك بشأن أولوية العمليات الحسابية، فاستخدم الأقواس
()لتوضيح ترتيب الحساب. فهذا يمنع حدوث الأخطاء ويحسن قابلية القراءة.
❓ أسئلة شائعة
7 / 2 يُنتج 3؛ أما القسمة العائمة فتحتفظ بالأرقام العشرية، على سبيل المثال، 7.0 / 2 ينتج عنها 3.5.++x وx++؟++x تزيد القيمة أولاً ثم تُرجع القيمة الجديدة؛ أما x++ فتُرجع القيمة الحالية ثم تزيدها. في جملة مستقلة، يتصرفان بنفس الطريقة، ولكن داخل تعبير، تختلف النتائج.&& و&؟&& هي عملية «AND» منطقية ذات الدائرة القصيرة التي تتخطى المعامل الأيمن عندما يكون المعامل الأيسر كاذبًا؛ & هو عامل «AND» بتّي يمكنه أيضًا العمل على القيم المنطقية، لكنه يقوم دائمًا بتقييم كلا الجانبين.?? مقابل ?.؟?? لتوفير قيمة افتراضية عندما تكون القيمة فارغة؛ واستخدم ?. للوصول بأمان إلى عنصر في كائن قد تكون قيمته فارغة، لتجنب استثناء NullReferenceException.📖 ملخص
- تقوم العوامل الحسابية بإجراء العمليات الحسابية؛ لاحظ أن القسمة الصحيحة تؤدي إلى اقتطاع الأرقام العشرية
- للزيادة والنقصان صيغتان، إحداهما مسبقة والأخرى لاحقة، تختلفان في توقيت التقييم
- تُرجع العوامل العلائقية قيم
boolفي المنطق الشرطي - تدعم العوامل المنطقية
&&و||التقييم السريع - تعمل عوامل التعيين المركبة على الجمع بين عملية حسابية وعملية التعيين
- عامل الشرط
?:هو تعبير اختيار ثلاثي موجز ??يوفر قيمة افتراضية في حالة القيمة الفارغة، و?.يتيح الوصول الآمن إلى العناصر، و??=لا يقوم بالتعيين إلا في حالة القيمة الفارغة- ترتيب الأولوية من الأعلى إلى الأدنى: اللاحقة -> الأحادية -> الضربية -> الجمعية -> العلائقية -> المساواة -> «و» المنطقية -> «أو» المنطقية -> دمج القيم الفارغة -> الشرطية -> التعيين
📝 تمارين
- اكتب برنامجًا يحسب قيمتي
7 / 2و7.0 / 2ويعرض النتائج، مع التحقق من سلوك الاقتطاع في القسمة الصحيحة. - اكتب برنامجًا يوضح الفرق بين
++xوx++في أحد التعبيرات: حدد قيمةint a = 5، ثم احسب قيمتي++a * 3وa++ * 3كل على حدة، واعرض النتائج. - اكتب برنامجًا يستخدم عامل الشرط لتحديد ما إذا كان عدد صحيح موجبًا أم صفرًا أم سالبًا (يُسمح بالتداخل
?:). - اكتب برنامجًا ينشئ متغيرًا
stringويُعيّن قيمته إلىnull، ثم يستخدم??و?.لإخراج قيمته الافتراضية والوصول إلى طوله بأمان. - اكتب برنامجًا يحسب قيمتي
2 + 3 * 4و(2 + 3) * 4، مع توضيح كيفية تأثير الأقواس على ترتيب العمليات الحسابية.