المتغيرات وأنواع البيانات في C#
C# لغة حديثة وأنيقة صممتها مايكروسوفت، وتجمع بين صرامة الأنواع التي تحمي من الأخطاء وسهولة الكتابة التي تريح المبرمج. ستستخدمها لبرامج ويندوز، وتطبيقات الويب، وألعاب Unity. في هذا الدرس ستتعرف على المتغيرات وأنواعها، وعلى ميزة ستحبها كثيراً: إدراج القيم داخل النصوص بعلامة $.
تعريف المتغير
Section titled “تعريف المتغير”string name = "سارة";int points = 10;points += 5;Console.WriteLine(name + " لديها " + points + " نقطة");Console.WriteLine($"{name} لديها {points} نقطة");سارة لديها 15 نقطةسارة لديها 15 نقطة- الصيغة: النوع ثم الاسم ثم القيمة، وفاصلة منقوطة في النهاية.
- السطران يطبعان نفس النتيجة، لكن الثاني أوضح بكثير: علامة
$قبل النص تسمح بوضع المتغيرات بين قوسين معقوفين{ }مباشرة. هذه الميزة اسمها النصوص المُدرَجة (String Interpolation).
تخيّل المتغيرات مثل صناديق مكتوب عليها نوع المحتوى: صندوق «للأرقام الصحيحة فقط»، وصندوق «للنصوص فقط». C# لا تسمح لك أبداً بوضع نص في صندوق الأرقام.
الأنواع الأساسية
Section titled “الأنواع الأساسية”int students = 30;double price = 12.5;decimal balance = 99.95m;bool isOpen = true;char grade = 'A';Console.WriteLine($"{students} {price} {balance} {isOpen} {grade}");30 12.5 99.95 True A| النوع | يخزن | ملاحظة |
|---|---|---|
int |
أعداد صحيحة | الأكثر استخداماً |
double |
أعداد عشرية | للحسابات العلمية والعامة |
decimal |
أعداد عشرية دقيقة جداً | للأموال، والقيمة تنتهي بحرف m |
bool |
true أو false |
تُطبع True و False |
char |
حرف واحد | بين علامتين مفردتين |
string |
نص | بين علامتين مزدوجتين |
لماذا decimal للأموال؟ لأن double يخزن بعض الكسور بتقريب بسيط جداً، وهذا مقبول في الفيزياء لكنه غير مقبول في حسابات البنوك، حيث يجب أن يكون كل قرش دقيقاً.
العمليات الحسابية
Section titled “العمليات الحسابية”Console.WriteLine(10 / 4);Console.WriteLine(10.0 / 4);Console.WriteLine(10 % 4);22.52قسمة عددين صحيحين تحذف الكسر. اجعل أحد الطرفين عشرياً للحصول عليه.
var و const
Section titled “var و const”var city = "القاهرة"; // stringconst double Tax = 0.14; // ثابتvar: يستنتج المترجم النوع من القيمة، ويبقى النوع ثابتاً بعد ذلك.const: قيمة ثابتة معروفة وقت كتابة الكود ولا تتغير.
التحويل بين الأنواع
Section titled “التحويل بين الأنواع”int n = int.Parse("25");Console.WriteLine(n + 5);Console.WriteLine("25" + 5);
bool ok = int.TryParse("abc", out int result);Console.WriteLine($"{ok} {result}");30255False 0int.Parse: من نص إلى رقم، وإذا لم يكن النص رقماً يتوقف البرنامج بخطأ.int.TryParse: يحاول التحويل، ويُرجعtrueأوfalse، ويضع الناتج في المتغير بعدout. هذا هو الأسلوب الآمن مع إدخال المستخدم."25" + 5تعطي"255"، لأن+مع نص تعني الدمج.
ومن عشري إلى صحيح:
double avg = 7.9;Console.WriteLine((int)avg);Console.WriteLine(Convert.ToInt32(avg));78لاحظ الفرق: (int) تقطع الكسر، أما Convert.ToInt32 فـتقرّب لأقرب عدد صحيح.
تنسيق الأرقام في النصوص المُدرَجة
Section titled “تنسيق الأرقام في النصوص المُدرَجة”Console.WriteLine($"السعر: {12.5:F2} جنيه");Console.WriteLine($"{1 + 2} و {name.Length}");السعر: 12.50 جنيه3 و 4:F2 بعد القيمة تعني «رقمين بعد الفاصلة». وبين { } يمكنك كتابة أي تعبير، مثل عملية حسابية أو طول نص.
القيم الفارغة null
Section titled “القيم الفارغة null”string? nickname = null;Console.WriteLine(nickname ?? "لا يوجد");لا يوجدstring?: نص يمكن أن يكونnull، أي بلا قيمة.??: «إذا كانت القيمة null، فاستخدم هذه البديلة».
C# الحديثة تحذرك عندما تستخدم متغيراً قد يكون null دون فحصه، وهذا يحميك من خطأ شهير اسمه NullReferenceException.
جرّب بنفسك
Section titled “جرّب بنفسك”string productName = "سماعة";double unitPrice = 150.0;int quantity = 2;double total = unitPrice * quantity;
Console.WriteLine($"المنتج: {productName}");Console.WriteLine($"الإجمالي: {total} جنيه");المنتج: سماعةالإجمالي: 300 جنيهتحدٍّ: حوّل الأسعار إلى decimal، واطبع الإجمالي بعد ضريبة 14% برقمين عشريين باستخدام :F2.
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان m مع decimal:
decimal x = 9.95;خطأ، لأن9.95وحدهاdouble. اكتب9.95m. - Parse مع إدخال غير موثوق: يتوقف البرنامج إذا كتب المستخدم حروفاً. استخدم
TryParse. - نسيان $ قبل النص:
"{name}"تطبع الأقواس حرفياً. الصحيح$"{name}".
اختبر نفسك
Section titled “اختبر نفسك”سؤال
أي نوع هو الأنسب لتخزين رصيد حساب بنكي في C#؟
decimal دقيق جداً في الكسور العشرية، ولهذا يُستخدم في الحسابات المالية.
سؤال
ماذا يطبع Console.WriteLine($"{2 + 3}");؟
النص المُدرَج بـ $ يحسب التعبير بين القوسين المعقوفين ويضع نتيجته.
الخلاصة
Section titled “الخلاصة”- الأنواع الأساسية:
intوdoubleوdecimalللأموال وboolوcharوstring. varيستنتج النوع، وconstللثوابت.$"...{x}..."لإدراج القيم في النصوص، و:F2لتنسيق الكسور.int.Parseوint.TryParseالأأمن للتحويل، و(int)تقطع بينماConvert.ToInt32تقرّب.string?يقبل null، و??للقيمة البديلة.