تعلم كيفية البرمجة ب #C


الدرس: المتغيرات


الصفحة السابقة
في هذا الفصل سوف نتعرف على المتغيرات وكيف ستوفر لنا هذه العناصر الأساسية العديد من الخدمات للتعامل مع المعلومات التي من المحتمل أن تتغير في برامج الكمبيوتر الخاصة بنا.
سنستمر في اكتشاف أنواع مختلفة من المتغيرات وسنقوم بمعالجاتنا الأولى معهم.

انتبه لهذا الفصل ، من الضروري حقًا فهم المتغيرات المستخدمة عند تطوير تطبيق الكمبيوتر.

ما هو المتغير؟



مثل كل لغات البرمجة ، ستكون C# قادرة على تخزين البيانات باستخدام المتغيرات. إنها بالفعل كتل من الذاكرة تحتوي على أرقام أو سلاسل أو تواريخ أو أشياء أخرى كثيرة.
سوف تسمح لنا المتغيرات بإجراء حسابات رياضية ، وتسجيل عمر الزائر ، ومقارنة القيم ، إلخ.

يمكن مقارنتها بالمصنفات او الكراسات ذات الملصقات. سنكون قادرين على وضع الأشياء في هذه المصنفات ، على سبيل المثال ، وضعت 30 في المصنف المسمى "عصر نيكولاس" و 20 في مصنف "عصر إرميا" . إذا كنت أرغب في معرفة عمر نيكولاس ، لا بد لي فقط من البحث في هذا المصنف للحصول على 30 عامًا. يمكنني أيضًا استبدال ما هو موجود في المصنف الخاص بي بشيء آخر ، على سبيل المثال التغيير من 30 إلى 25. لا يمكن وضع شيئين في مصنفاتي ، في موقع واحد فقط.
يمثل المتغير باسمه ، ويتميز بنوعه ويحتوي على قيمة .

يتوافق النوع مع ما يمثله المتغير: عدد صحيح ، سلسلة حروف ، تاريخ ، إلخ.
على سبيل المثال ، يمكن تخزين عمر الشخص باعتباره عددًا صحيحًا ويمكن الوصول إليه بواسطة "age" المتغير ، وهو مكتوب في C# :

int age;
وهذا ما يسمى "إعلان متغير age " .
تتيح الكلمة الأساسية int للإشارة إلى للمترجم أن المتغير "age" هو عدد صحيح رقمي .  int يتوافق مع بداية " integer " مما يعني " عدد صحيح " باللغة الإنجليزية.
هنا ، لم يتم تهيئة المتغير "age" ، ولا يمكن استخدامه لأن المترجم لا يعرف القيمة الموجودة في المتغير.
لتهيئته (نتحدث أيضًا عن "تعيين قيمة") ، سنستخدم عامل التشغيل المتساوي ("=") .

int age;
age = 30;
لدينا متغير "age" الآن لديه عدد صحيح "30" كقيمة له.
يمكن أيضًا تهيئة المتغير في نفس الوقت الذي يتم فيه إعلانه. وبالتالي ، يمكننا استبدال الكود السابق بـ:

int age = 30;
لإعلان متغير في C# ، نبدأ دائمًا بالإشارة إلى نوعه ( int ، هنا عدد صحيح ) واسمه (age) . سيكون من الضروري تعيين قيمة لهذا المتغير مع العامل "=" ، إما بناءً على نفس التعليمات الواردة في إعلان المتغير ، أو بعد ذلك في التعليمات البرمجية ، ولكن على أي حال ، قبل استخدام هذا المتغير.
يمكننا في أي وقت طلب القيمة الموجودة في متغير ، على سبيل المثال:

int age = 30;
Console.WriteLine(age); // يعرض 30
من الممكن تعديل قيمة المتغير في أي وقت بفضل استخدام العامل = الذي رأيناه:

int age = 30;
Console.WriteLine(age); // يعرض 30
age = 20;
Console.WriteLine(age); // يعرض 20
يمكنك تسمية المتغيرات الخاصة بك تقريبا كما تريد ، باستثناء بعض التفاصيل. لا يمكن أن يكون لأسماء المتغيرات نفس اسم النوع من الانواع. سيكون من المستحيل عندئذ استدعاء متغير int . لا يمكنك أيضًا استخدام أحرف خاصة ، مثل المسافات أو علامات الترقيم. وبالمثل ، لا يمكنك تسمية متغير يبدأ بالأرقام.
ومع ذلك ، من الممكن استخدام لهجات بأسماء متغيرة ، ولكن هذا غير مستحسن وليس جزءًا من ممارسات التطوير الجيدة. في الواقع ، يوصى غالبًا بتسمية متغيراتها باللغة الإنجليزية (اللغة التي لا تحتوي على لهجات). ستلاحظ أنني لا أفعل ذلك طوعًا في هذا البرنامج التعليمي حتى لا أضيف قيدًا إضافيًا عند قراءة الكود. لكنك حر في القيام بذلك .
بشكل عام ، يبدأ المتغير بحرف صغير وإذا كان اسمه يمثل عدة كلمات ، فسنبدأ كلمة جديدة بحرف كبير . مثلا :

int ageVisitor;
وهذا ما يسمى camel case .
انتبه الى مبدأ حساسية الأحرف (كبيرة او صغيرة)، وتوخي الحذر من ageduvisiteur و  ageDuVisiteur سوف يكون اثنين من المتغيرات المختلفة:

int ageduvisiteur = 30;
int ageDuVisiteur = 20;
Console.WriteLine(ageduvisiteur); // يعرض 30
Console.WriteLine(ageDuVisiteur); // يعرض 20
لاحظ تفاصيل قد تبدو واضحة ، ولكن يتم إعادة تعيين جميع المتغيرات في كل مرة يتم فيها تشغيل البرنامج مرة أخرى. بمجرد بدء تشغيل البرنامج ، يتم إفراغ خزائن الملفات ، كما لو كنا نتحرك إلى أماكن جديدة في كل مرة. لذلك من المستحيل أن تستمر المعلومات بين تنفيذي البرنامج باستخدام المتغيرات. لهذا ، سوف نستخدم حلولًا أخرى ، مثل حفظ القيم في ملف أو في قاعدة بيانات. سوف نعود إلى هذا في درس مستقبلي.

أنواع مختلفة من المتغيرات


لقد رأينا أعلاه أن المتغير "age" يمكن أن يكون عددًا صحيحًا رقميًا بفضل الكلمة الأساسية int . يحتوي .NET Framework على العديد من الأنواع لتمثيل العديد من الأشياء المختلفة.
على سبيل المثال ، يمكننا تخزين سلسلة حروف باستخدام النوع string .

string prenom = "nicolas";
أو عشري مع:

decimal soldeCompteBancaire = 100;
أو منطقية (والتي تمثل قيمة صحيحة أو خاطئة) مع

bool estVrai = true;
من المهم تخزين البيانات في متغيرات من النوع الصحيح.
لا يمكنك ، على سبيل المثال ، تخزين الاسم الأول "نيكولاس" في عدد صحيح.
الأنواع الأساسية الرئيسية لإطار عمل .NET هي:
نوع وصف
byte عدد صحيح من 0 إلى 255
short عدد صحيح من -32،768 إلى 32،767
int عدد صحيح من -2147483648 إلى 2147483647
long عدد صحيح من -9223372036854775808 إلى 9223372036854775807
float رقم دقة واحد من -3.402823e38 إلى 3.402823e38
double رقم الدقة المزدوج من -1.79769313486232e308 إلى 1.79769313486232e308
decimal رقم عشري مناسب بشكل خاص للحسابات المالية (بسبب الأعداد الكبيرة بعد الفاصلة العشرية)
char يمثل شخصية
string سلسلة نصية
bool قيمة منطقية (صواب أو خطأ)
سترى لاحقًا أنه لا تزال هناك أنواع أخرى في .NET Framework ويمكنك أيضًا إنشاء أنواعك الخاصة.

الاحالات والعمليات والسلاسل


من الممكن إجراء عمليات على المتغيرات وبين المتغيرات. لقد رأينا بالفعل كيفية تعيين قيمة لمتغير باستخدام العامل = .

int age = 30;
string prenom = "nicolas";
ملاحظة: في هذه الفقرة ، سأقدم لك عدة أمثلة على المهام. سيتم إجراء هذه المهام بناءً على نفس التعليمات الواردة في الإعلان من أجل الإيجاز. لكن هذه الأمثلة وظيفية بشكل واضح للمهام التي تقع في مكان مختلف عن الإعلانعلى المتغير .
بالإضافة إلى المهمة البسيطة ، يمكننا أيضًا القيام بعمليات ، على سبيل المثال:

int resultat = 2 * 3;
او حتى

int age1 = 20;
int age2 = 30;
int moyenne = (age1 + age2) / 2;
من الواضح أن عوامل التشغيل "+" أو "*" أو "/" أو حتى "-" (التي لم نستخدمها بعد) تستخدم للقيام بالعمليات الرياضية التي تتوافق معها ، أي الجمع والضرب على التوالي ، الانقسام والطرح.
من المؤكد أنك ستخمن أن " resultat " المتغيرة تحتوي على 6 وأن moyenne ​​يساوي 25.
تجدر الإشارة إلى أن المتغيرات تحتوي على قيمة لا يمكن تغييرها إلا من خلال تعيين قيمة جديدة لهذا المتغير.
إذا كان لدي الكود التالي:

int age1 = 20;
int age2 = 30;
int moyenne = (age1 + age2) / 2;
age2 = 40;
سيكون المتغير moyenne دائمًا بقيمة 25 حتى إذا قمت بتغيير قيمة المتغير "age2" . في الحقيقة ، عند حساب moyenne ، قمت بتخزين القيمة 25 في المصنف الخاص بي باستخدام مشغل المهمة "=" وأغلقت المصنف الخاص بي. لا يؤثر تغيير قيمة المصنف "age2" على المصنف " moyenne " لأنه مغلق. لتعديله ، سيكون من الضروري إعادة تنفيذ عملية تعيين المتغير moyenne ، عن طريق كتابة تعليمة الحساب مرة أخرى ، أي:

int age1 = 20;
int age2 = 30;
int moyenne = (age1 + age2) / 2;
age2 = 40;
moyenne = (age1 + age2) / 2;
يمكن أيضًا استخدام عامل التشغيل "+" لتسلسل السلاسل ، على سبيل المثال:

string codePostal = "33000";
string ville = "Bordeaux";
string adresse = codePostal + " " + ville;
Console.WriteLine(adresse); // يعرض : 33000 Bordeaux
هناك عوامل خاصة أخرى لا نجدها في دروس الرياضيات. على سبيل المثال ، المشغل ++ الذي يجعل من الممكن تنفيذ زيادة قدرها 1 ، أو المشغل -- مما يجعل من الممكن إجراء تخفيض 1.
وبالمثل ، يمكن إضافة العوامل التي رأيناها بالفعل إلى المشغل = لتبسيط العملية التي تأخذ متغير مثل المعامل وهذا المتغير نفسه كنتيجة.
مثلا :

int age = 20;
age = age + 10; // age يحتوي 30 (عملية جمع)
age++; // age يحوي 31 (عملية تزايد بـ 1)
age--; // age يحتوي 30 (عملية تناقص بـ 1)
age += 10; // معادلة لـ age = age + 10 (age يحتوي 40)
age /= 2; // معادلة لـ age = age / 2 => (age يساوي 20)
كما رأينا في دروس الرياضيات لدينا ، فمن الممكن تجميع العمليات مع الأقواس للعمل وفق أولوياتها.
وبالتالي ، فإن التعليمات التي شوهدت سابقا:

int moyenne = (age1 + age2) / 2;
أداء مجموع السنتين قبل تقسيمهما على 2 ، لأن الأقواس لها الأسبقية.
ومع ذلك ، فإن التعليمات التالية:

int moyenne = age1 + age2 / 2;
كان يمكن أن يبدأ بتقسيم age2 على 2 وإضافة age1 ، والتي لن يكون لها أي علاقة مع moyenne ​​بعد الآن. في الواقع ، تقسيم له الأولوية على الجمع.
كن حذرا ، القسمة هنا هو خاصة بعض الشيء.
خذ هذا المثال:

int moyenne = 5 / 2;
Console.WriteLine(moyenne);
إذا قمنا بتنفيذها ، فإننا نرى أن moyenne ​​يساوي 2.
2؟ إذا كنت أتذكر دروس الرياضيات بشكل صحيح ... أليس كذلك 2.5؟
نعم و لا.
إذا قسمنا 5 على 2 ، سنحصل على 2.5.
من ناحية أخرى ، هنا نقسم العدد الصحيح 5 على العدد الصحيح 2 ونخزن النتيجة في العدد الصحيح. تقوم C# فعليًا بتقسيم عدد صحيح ، أي يأخذ الجزء الصحيح من 2.5 ، أي 2.
بالإضافة إلى ذلك ، فإن العدد الصحيح المتوسط ​​غير قادر على تخزين قيمة تحتوي على أرقام بعد العلامة العشرية. سوف يستغرق سوى الجزء كله.
للحصول على 2.5 ، يجب استخدام التعليمات البرمجية التالية:

double moyenne = 5.0 / 2.0;
Console.WriteLine(moyenne);
هنا نقسم اثنين من " double " بينهما ونخزن النتيجة في " "double .  (تذكر أن نوع البيانات " double " يخزن أرقام الفاصلة العائمة).
يفهم C# أنه double لأننا أضفنا 0 وراءه. خلاف ذلك ، فهو يعتبر أن الأرقام صحيحة.

رموز خاصة في السلاسل


فيما يتعلق بتعيين سلاسل الأحرف ، قد يكون لديك مفاجآت إذا حاولت وضع أحرف خاصة في متغيرات الكتابة string .
في الواقع ، يتم تعيين سلسلة أحرف بعلامات اقتباس "" ، وكيفية القيام بها بحيث يمكن أن تحتوي سلسلة الأحرف لدينا على علامات اقتباس؟
هذا هو المكان الذي يأتي فيه الحرف الخاص \ ، والذي سيكون أمام علامة الاقتباس مباشرة ، على سبيل المثال الكود التالي:

string phrase = "Mon prénom est \"Nicolas\"";
Console.WriteLine(phrase);
سيعرض:
c sharp .net framework
إذا كنت قد اختبرت التعليمات بنفسك Console.WriteLine   وقمت بتسلسل العديد من الإرشادات التي تكتب الأسطر ، فقد تلاحظ أننا نمرر الخط في كل مرة. إنه دور التعليمات WriteLine   التي تعرض سلسلة الأحرف وتنتقل إلى السطر في نهاية سلسلة الأحرف.
يمكننا أن نفعل الشيء نفسه باستخدام الحرف الخاص "\ n" . يسمح لك بالانتقال إلى السطر في كل مرة يتم فيها مواجهتها.
لذلك الكود التالي:

string phrase = "Mon prénom est \"Nicolas\"";
Console.WriteLine(phrase);
Console.WriteLine("Passe\nà\nla\nligne\n\n\n");
سيعرض:
c sharp .net framework
حيث نلاحظ المعابر الخطية المختلفة.
يمكنك أن تخبرني أننا يمكن أن نكتب Console.WriteLine عدة مرات و ستكون على حق.
لكن الأحرف الخاصة تسمح لنا بعمل أشياء أخرى مثل الجدولة على سبيل المثال بفضل الحرف الخاص "\ t" . الكود التالي:

Console.WriteLine("Choses à faire :");
Console.WriteLine("\t - Arroser les plantes");
Console.WriteLine("\t - Laver la voiture");
سيعرض علامات التبويب ، كما هو موضح أدناه:
c sharp .net framework
لقد رأينا أن الحرف \ هو حرف خاص وأنه جعل من الممكن إخبار المترجم بأننا أردنا استخدامه مع القيمة التي تتبعه ، مما يسمح بوجود جدول أو فاصل أسطر. كيف يمكن أن يكون لدينا سلسلة أحرف تحتوي على هذه الرموز الشهيرة؟
المبدأ هو نفسه ، يكفي اتباع هذه االرموز الخاصة الشهيرة:

string fichier = "c:\\repertoire\\fichier.cs";
Console.WriteLine(fichier);
والتي سوف تعطي:
c sharp .net framework
بالنسبة لهذه الحالة بالذات ، من الممكن أيضًا استخدام بناء الجملة التالي باستخدام الحرف الخاص @ أمام سلسلة الأحرف:

string fichier = @"c:\repertoire\fichier.cs"; // contient : c:\repertoire\fichier.cs
بالطبع ، يمكننا تخزين الأحرف الخاصة في متغيرات للقيام بها على سبيل المثال:

string sautDeLigne = "\n";
Console.WriteLine("Passer" + sautDeLigne + "à" +
        sautDeLigne + "la" + sautDeLigne + "ligne");
في هذه الحالة ، يمكن استبدال متغير jumpOfLine بنوع من المتغيرات الموجودة بالفعل في .NET Framework ، وهي Environment.NewLine .
هذا يسمح بالحصول على الكود التالي:

Console.WriteLine("Passer" + Environment.NewLine + "à" + 
                  Environment.NewLine + "la" + Environment.NewLine + "ligne");
السماح للعرض:
c sharp .net framework
لاحظ أنه من الممكن كسر سطر عند كتابة تعليمة C# كما فعلت في الجزء الأخير من التعليمات البرمجية لتحسين قابلية القراءة. تذكر أن الفاصلة المنقوطة هي التي تنهي التعليمة.
Environment.NewLine؟ نوع من المتغير؟ ما هذا الشيء؟
في الواقع ، أنا أخدعك قليلا على الكلمات. لتسهيل الفهم ، يمكننا اعتبار هذا Environment.NewLine   متغيرًا ، بنفس طريقة المتغير "lineShipping" الذي حددناه. في الواقع ، إنه أكثر تعقيدًا من المتغير. سنكتشف لاحقا ما يدور حوله حقا.

في الخلاصة


  • المتغير هو مساحة ذاكرة تستخدم لتخزين قيمة من نوع معين.
  • يحتوي C# على الكثير من الأنواع المحددة مسبقًا ، مثل الأعداد الصحيحة ( int) ، السلاسل ( string) ، إلخ.
  • نستخدم عامل التشغيل = لتعيين قيمة لمتغير.
  • من الممكن إجراء عمليات بين المتغيرات.