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


الدرس: كتل الكود ونطاق المتغيرات


الصفحة السابقة
استخدمنا بانتظام في الفصل السابق دعامات الفتح والإغلاق: {و}. قلنا بسرعة أن هذه الأقواس كانت تستخدم لإنشاء كتل من التعليمات البرمجية.
استخدام الأقواس ينطوي أيضا على دقة أخرى. لقد رأيته في عنوان الفصل ، يتعلق بنطاق المتغير.

الآن دعونا نلقي نظرة على كيفية عمله.

كتل التعليمات


تسمح لك مجموعات التعليمات البرمجية بتجميع العديد من الإرشادات التي سيتم تنفيذها في نفس السياق.

قد يكون هذا هو الحال على سبيل المثال بعد if، قد نرغب في تنفيذ العديد من التعليمات. مثلا :

decimal compteEnBanque = 300;
if (compteEnBanque >= 0)
{
    Console.WriteLine("Votre compte est créditeur");
    Console.WriteLine("Voici comment ouvrir un livret …");
}
else
{
    Console.WriteLine("Votre compte est débiteur");
    Console.WriteLine("N’oubliez pas que les frais de découverts sont de …");
}
هنا ، نقوم بسلسلة اثنين  Console.WriteLine اعتمادًا على نتيجة المقارنة compteEnBanque بـ 0.
ستكون كتل التعليمات البرمجية مفيدة بمجرد رغبتك في تجميع العديد من الإرشادات. هذا هو الحال بالنسبة لهياكل الشرطية ولكن سنرى استخدامات أخرى كثيرة ، مثل switch تلك التي رأيناها أعلاه فقط ، أو الحلقات أو الأساليب التي سنناقشها في الفصل التالي.

نطاق المتغير


C# ... نطاق ... يبدو وكأنه الموسيقى ...

في الواقع ، فإن "نطاق المتغير" هو منطقة الكود التي يمكن فيها استخدام المتغير. يتوافق بشكل عام مع مقطع الكود الذي يتم فيه تعريف المتغير.
لذلك الكود التالي:

static void Main(string[] args)
{
    string prenom = "Nicolas";
    string civilite = "M.";
    if (prenom == "Nicolas")
    {
        int age = 30;
        Console.WriteLine("Votre age est : " + age);
        switch (civilite)
        {
            case "M.":
                Console.WriteLine("Vous êtes un homme de " + age + " ans");
                break;
            case "Mme":
                Console.WriteLine("Vous êtes une femme de " + age + " ans");
                break;
        }
    }
    if (age >= 18)
    {
        Console.WriteLine(prenom + ", vous êtes majeur");
    }
}
غير صحيح وسيؤدي إلى خطأ في الترجمة. في الواقع ، نحن نحاول الوصول إلى "age" المتغير خارج كتلة الكود حيث يتم تعريفها. نرى أن هذا المتغير معرّف في الكتلة التي يتم تنفيذها عندما يكون اختبار المساواة في الاسم الأول بالسلسلة "Nicolas" صحيحًا بينما نحاول مقارنته بـ 18 في مكان لم يعد موجودًا فيه.
يمكننا استخدام "age" دون أي مشكلة في if الأولى  ، وحتى في الكتل الفرعية من الكود ، كما هو الحال في الكتلة الفرعية لل switch، ولكن ليس خارج فقرة الكود التي تم تعريف المتغير بها. وبالتالي ، يمكن الوصول إلى المتغير "prenom" في آخرif لأنه تم تعريفه في كتلة الأصل.

ستلاحظ أن الانتهاء هنا مفيد لنا. بالفعل ، يقترح Visual Studio Express إكمال اسم المتغير في كتلة حيث يمكن الوصول إليه. في كتلة حيث لا ، لا تقدم الإكمال التلقائي ذلك.
نظرًا لأن Visual Studio Express ذكي كجهاز ، إذا لم تقدم عملية الإكمال ما تريد ، فمن المحتمل أنك لا تملك الحق. قد يكون أحد التفسيرات أن النطاق لا يسمح بذلك.

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

لذلك ، أنصحك بمحاولة تحديد الحد الأدنى من الكود حيث يكون استخدام المتغير مناسبًا.

في الخلاصة


  • يتم استخدام كتلة من التعليمات البرمجية لتجميع الإرشادات التي تبدأ بـ {وتنتهي بـ}.
  • سيكون للمتغير المحدد داخل كتلة الكود نطاق كتلة التعليمات البرمجية هذه.