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


الدرس: الجداول والقوائم و التعدادات


الصفحة السابقة
في الفصول السابقة، يمكننا استخدام أنواع أساسية من .NET Framework، مثل int، string، double، الخ سنكتشف هنا أنواعًا أخرى ستثبت أنها مفيدة جدًا في بناء تطبيقات الكمبيوتر الخاصة بنا. 
بمجرد إتقانها ، لن تكون قادرًا على الاستغناء عنها! 

الجداول


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

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" }; 
نحدد هنا جدول سلسلة أحرف يحتوي على 7 سلاسل ، أي أيام الأسبوع بالفرنسية .لا تولي اهتمامًا كبيرًا للمشغل  new في الوقت الحالي ، فسنعود إلى ذلك في الدرس التالي ؛ ببساطة يخلق الجدول.
تتيح الأقواس المربعة "[]" التي تلي اسم النوع أن يعرف المترجم أننا نريد استخدام صفيف من هذا النوع ، وهنا النوع string .
يشبه الصفيف خزانة صغيرة يتم تخزين المتغيرات فيها. يتم وضع كل متغير على الرف. للوصول إلى المتغير الموجود على رف ، استخدم اسم الخزانة وأشير إلى فهرس الرف حيث يتم تخزين المتغير ، باستخدام أقواس مربعة []:

Console.WriteLine(jours[3]); // بعرض Jeudi
Console.WriteLine(jours[0]); // يعرض Lundi
Console.WriteLine(jours[10]); // يؤدي خطأ وقت التشغيل لأن الفهرس غير موجود 
انتبه ، العنصر الأول للصفيف يقع في الفهرس 0 والآخر يقع في الفهرس "حجم المصفوفة - 1" ، أي 6 في مثالنا. إذا حاولنا الوصول إلى فهرس غير موجود ، فسوف يثير التطبيق خطأ.
بدون دراسة الفصل على الحلقات ، من الممكن استعراض جدول كامل بالتعليمات التالية:

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" };
for (int i = 0; i < jours.Length; i++)
{
    Console.WriteLine(jours[i]);
} 
سنعود إلى هذا لاحقًا ، ولكن لفهم ذلك ، سنقوم هنا بتمرير العناصر من 0 إلى الحجم -1 ونعرض عنصر الصفيف المطابق للفهرس الحالي.
مما يعطينا:
c sharp .net framework
لنعد الآن إلى إعلان الجدول:

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" }; 
يتيح هذا الإدخال إنشاء صفيف يحتوي على 7 عناصر وتعيين قيمة لكل عنصر من الصفيف. انها في الواقع هنا كتابة مبسطة. هذه الكتابة تعادل هذا:

string[] jours = new string[7];
jours[0] = "Lundi";
jours[1] = "Mardi";
jours[2] = "Mercredi";
jours[3] = "Jeudi";
jours[4] = "Vendredi";
jours[5] = "Samedi";
jours[6] = "Dimanche"; 
وهو أكثر مطولا بكثير ، ولكن من ناحية أخرى ، أكثر وضوحا.
التعليمة الأولى تخلق مجموعة يمكن أن تحتوي على 7 عناصر. 7 يشير إلى حجم الجدول ، لا يمكن تغييره. يعيّن كل عبارة لاحقة قيمة فهرس في الصفيف. تذكر أن الصفيف يبدأ من الفهرس 0 ويصل إلى مؤشر الحجم - 1.
من السهل إجراء عمليات على صفيف ، مثل الفرز. يمكننا استخدام هذه الطريقة Array.Sort() . مثلا :

Array.Sort(jours); 
مع هذه التعليمات ، سيتم سرد الجدول بالترتيب الأبجدي. سيكون لديك الفرصة لرؤية طرق أخرى في الفصول اللاحقة. لذلك الكود التالي:

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" };
Array.Sort(jours);
for (int i = 0; i < jours.Length; i++)
{
    Console.WriteLine(jours[i]);
} 
سوف تنتج:
c sharp .net framework
وهو غير ضروري للغاية .
صفيف "jours" هو ما نسميه صفيف أحادي البعد. من الممكن أيضًا إنشاء جداول بأبعاد N ، ولكن من النادر جدًا تجاوز البعدين. هذا مفيد عند التعامل مع المصفوفات.
لن ندرس المصفوفات التي تحتوي على أكثر من بعد في هذا البرنامج التعليمي لأنها قد تكون ذات فائدة كبيرة لك في تطبيقاتك الأولى. من ناحية أخرى ، فإن النوع التالي سوف يخدمك بوفرة.

القوائم


نوع آخر سنستخدمه بكثرة هو القائمة. سنرى كيف يعمل هذا النوع ولكن دون إجراء دراسة شاملة لأنه قد يكون طويلًا ومملًا. لنلقِ نظرة على هذا المثال:

List chiffres = new List(); // انشاء قائمة
chiffres.Add(8); // القائمة تحتوي 8
chiffres.Add(9); // القائمة تحتوي8 و 9
chiffres.Add(4); // القائمة تحتوي8 و 9 و 4

chiffres.RemoveAt(1); // القائمة تحتوي 8 و 4

foreach (int chiffre in chiffres)
{
    Console.WriteLine(chiffre);
} 
السطر الأول ينشئ القائمة. سوف نعود إلى هذه التعليمات بعد ذلك بقليل في الفصل. إنها قائمة الأعداد الصحيحة.
نضيف أعداد صحيحة إلى القائمة باستخدام الطريقة Add() . نضيف الأعداد الصحيحة 8 و 9 و 4 هنا.
RemoveAt() تسمح الطريقة بحذف عنصر باستخدام الفهرس الخاص به ، وهنا نحذف العدد الصحيح الثاني ، أي 9.
مثل المصفوفات ، يبدأ العنصر الأول في القائمة في الفهرس 0.
بعد هذه الإرشادات ، تحتوي القائمة على الأعداد الصحيحة 8 و 4.
أخيرًا ، نتصفح العناصر الموجودة في القائمة باستخدام التعليمات foreach . سوف نعود إلى هذا بالتفصيل في الفصل عن الحلقات. في الوقت الحالي ، نحتاج فقط إلى فهم أننا نعرض جميع العناصر الموجودة في القائمة.
يعطي :
c sharp .net framework
سوف يلاحظ القراء العاديون أن بناء القائمة مميز بعض الشيء. دعنا ننتقل إلى الكلمة الرئيسية new التي تنشئ القائمة ، وسنعود إلى هذا بمزيد من التفصيل في الدرس التالي. من ناحية أخرى ، نلاحظ استخدام علامات الاقتباس <> للإشارة إلى نوع القائمة. للحصول على قائمة عدد صحيح ، ما عليك سوى الإشارة إلى النوع int الموجود داخل علامات الاقتباس. وبالتالي ، لن يكون من الممكن إضافة أي شيء آخر غير عدد صحيح في هذه القائمة. على سبيل المثال ، العبارة التالية تسبب خطأ ترجمة:

List<int> chiffres = new List<int>();// انشاء 
chiffres.Add("chaine"); // لا يستطيع الترجمة 
من الواضح ، لا يمكنك إضافة الملفوف إلى قائمة الجزر!
بنفس الطريقة ، إذا كنا نرغب في إنشاء قائمة سلاسل الأحرف ، فيمكننا استخدام الكتابة string داخل علامات الاقتباس:

List<string> chaines = new List<string>(); // انشاء القائمة
chaines.Add("chaine"); // الترجمة ok
chaines.Add(1); // الترجمة ko لا نستطيع اظافة عدد الى قائمة سلاسل 
القوائم لديها أساليب عملية للغاية تسمح لجميع أنواع العمليات في القائمة. على سبيل المثال ، IndexOf() تسمح لك الطريقة بالبحث عن عنصر في القائمة وإرجاع الفهرس الخاص به.

List<string> jours = new List<string>();
jours.Add("Lundi");
jours.Add("Mardi");
jours.Add("Mercredi");
jours.Add("Jeudi");
jours.Add("Vendredi");
jours.Add("Samedi");
jours.Add("Dimanche");

int indice = jours.IndexOf("Mercredi"); // الفهرس يساوى 2 
سيكون لدينا الفرصة لرؤية استخدامات أخرى لطرق القائمة في الفصول الأخرى وفي الدورات المستقبلية.
القائمة التي رأيناها للتو ( List<>) هي في الواقع ما نسميه نوعًا عامًا(generic type) . لن نخوض في تفاصيل نوع النوع العام في الوقت الحالي ، لكن عليك فقط معرفة أن النوع العام يسمح لك بالتخصص حسب نوع ملموس. بالنسبة لقائمتنا ، يتيح هذا النوع العام الإشارة إلى نوع القائمة أو قائمة الأعداد الصحيحة أو قائمة السلاسل ، إلخ.
لا تقلق إذا لم يكن كل هذا واضحًا تمامًا ، فسنعود إلى الوراثة بمزيد من التفصيل في الدورة القادمة. الهدف هنا هو البدء في التعرف على نوع القائمة <> الذي سنستخدمه بانتظام ، وستسمح لنا الأمثلة التي سنراها بفهم التفاصيل الدقيقة لهذا النوع.
لاحظ أن هناك أيضًا كتابة مبسطة للقوائم. في الواقع ، من الممكن استبدال:

List<string> jours = new List<string>();
jours.Add("Lundi");
jours.Add("Mardi");
jours.Add("Mercredi");
jours.Add("Jeudi");
jours.Add("Vendredi");
jours.Add("Samedi");
jours.Add("Dimanche"); 
بواسطة

List<string> jours = new List<string> { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" }; 
يشبه إلى حد كبير الجداول.

قائمة أو الجدول؟


ستلاحظ أن النوعين ، الجدول والقائمة ، متشابهان للغاية. دعنا نحاول أن نرى ما يميزهم من أجل معرفة أي نوع للاختيار بين الاثنين.
في الواقع ، أحد الاختلافات الكبيرة هو أن المصفوفة يمكن أن تكون متعددة الأبعاد. هذه نقطة مهمة ولكن في سياق تطبيقاتك الأولى ، من النادر نسبياً أن تستخدمها. سيتم استخدامها بشكل عام في كثير من الأحيان في تطوير الألعاب أو عندما يرغب المرء في إجراء حسابات ثلاثية الأبعاد.
من ناحية أخرى ، الأهم بالنسبة لنا هو أن نوع الصفيف من حجم ثابت بينما القائمة ذات حجم متغير. يمكن إضافة عنصر جديد دون مشاكل بفضل الطريقة Add() . وبالمثل ، يمكنك حذف العناصر بالطرق Remove بينما في الصفيف ، يمكنك فقط استبدال القيم الحالية وليس من الممكن زيادة السعة.
بوجه عام ، سترى أنه في تطبيقاتك ، ستفضل استخدام القوائم لعرض قائمة بالمنتجات وقائمة العملاء على سبيل المثال.
احتفظ بالجداول في الجزء الخلفي من عقلك ، ويمكنها مساعدتك في مواقف محددة.

التعدادات


نوع واحد معين سنستخدمه أيضًا هو التعداد. كما يوحي اسمها ، وهذا يتوافق مع تعداد القيمة.
على سبيل المثال ، قد يكون من السهل جدًا تمثيل أيام الأسبوع في تعداد وليس في جدول.
نحدد التعداد بهذه الطريقة ، وذلك بفضل الكلمة الرئيسية enum :

enum Jours
{
    Lundi,
    Mardi,
    Mercredi,
    Jeudi,
    Vendredi,
    Samedi,
    Dimanche
} 
لاحظ أننا لا نستطيع تحديد هذا التعداد في أي مكان ، في الوقت الحالي ، دعنا فقط نحدده خارج الطريقة Main() .
لكي نكون دقيقين تمامًا ، يعد التعداد نوعًا تكون جميع القيم المحددة به أعداد صحيحة. الأولى هي 0 ، ولكل قيمة لاحقة تأخذ القيمة السابقة تزيد بمقدار 1. أي ، الاثنين هو 0 ، الثلاثاء هو 1 ، إلخ.
من الممكن فرض القيم على جميع قيم التعداد أو قيمها ، ستأخذ القيم غير القسرية القيمة السابقة التي تزيد بنسبة 1:

enum Jours
{
    Lundi = 5, // lundi تساوى 5
    Mardi, // mardi تساوى 6
    Mercredi = 9, // mercredi تساوى 9
    Jeudi = 10, // jeudi تساوى 10
    Vendredi, // vendredi تساوى 11
    Samedi, // samedi تساوى 12
    Dimanche = 20 // dimanche تساوى 20
} 
ولكن ، بغض النظر عن تخزين قيمة في قاعدة بيانات ، من النادر معالجة التعدادات كأعداد صحيحة لأن الغرض من التعداد هو تحديد قائمة شاملة وثابتة من القيم الثابتة. الكود أكثر وضوحًا وأبسط وأكثر قابلية للقراءة.
إن تعريف مثل هذا التعداد يرقى في الواقع إلى إثراء الأنواع التي لدينا تحت تصرفنا ، مثل الأعداد الصحيحة أو الأوتار (  int أو string ) . هذا النوع الجديد يسمى "jours . "
يمكننا تحديد متغير من النوع "jours" بنفس طريقة نوع آخر:

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

Jours lundi = Jours.Lundi;
Console.WriteLine(lundi); 
إما في برنامجنا:

class Program
{
    enum Jours
    {
        Lundi,
        Mardi,
        Mercredi,
        Jeudi,
        Vendredi,
        Samedi,
        Dimanche
    }

    static void Main(string[] args)
    {
        Jours lundi = Jours.Lundi;
        Console.WriteLine(lundi);
    }
} 
مما يعطينا:
c sharp .net framework
يمكننا أيضًا استخدام التعدادات لإجراء اختبارات المقارنة ، مثل:

if (jourDeLaSemaine == Jours.Dimanche || jourDeLaSemaine == Jours.Samedi)
{
    Console.WriteLine("Bon week-end");
} 
لاحظ أن .NET Framework يستخدم التعدادات كثيرًا. من المهم أن تعرف كيفية التعامل معها.
ربما لاحظت أنه عندما نعرض قيمة التعداد ، تعرضنا وحدة التحكم اسم التعداد وليس قيمته بالكامل. قد يبدو غريباً ، لكن السبب في ذلك هو أن C# تعامل معاملة خاصة كجزء من التعداد المعروض.

في الخلاصة


  • الصفيف هو نوع متقدم يمكن أن يحتوي على سلسلة من الأنواع الأخرى ، مثل صفيف من الأعداد الصحيحة أو صفيف من السلاسل.
  • القائمة هي نوع معقد أكثر مرونة بقليل من المصفوفة التي تسمح بالحصول على قائمة من أي نوع.
  • يتم استخدام التعداد عندما تريد إنشاء نوع به عدة قيم ثابتة ، مثل أيام الأسبوع.