التمرين - كتل التعليمات البرمجية ونطاق المتغير

مكتمل

تعد كتلة التعليمات البرمجية عبارة C# واحدة أو أكثر من شأنها تعريف مسار التنفيذ. تؤثر العبارات خارج كتلة التعليمات البرمجية على وقت تنفيذ كتلة التعليمات البرمجية هذه، وما إذا كان، وعدد المرات التي يتم فيها تنفيذ هذه الكتلة من التعليمات البرمجية في وقت التشغيل. عادة ما يتم تعريف حدود كتلة التعليمات البرمجية بواسطة أقواس متعرجة، {}.

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

تؤثر كتل التعليمات البرمجية في نطاق تعريف المتغير

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

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

إعداد بيئة الترميز الخاصة بك

تتضمن هذه الوحدة أنشطة عملية ترشدك خلال عملية إنشاء التعليمات البرمجية التوضيحية وتشغيلها. يتم تشجيعك على إكمال هذه الأنشطة باستخدام Visual Studio Code كبيئة تطوير. سيساعدك استخدام Visual Studio Code لهذه الأنشطة على أن تصبح أكثر راحة في كتابة التعليمات البرمجية وتشغيلها في بيئة مطور يستخدمها المحترفون في جميع أنحاء العالم.

  1. فتح Visual Studio Code.

    يمكنك استخدام القائمة Windows (أو مورد مكافئ لنظام تشغيل آخر) لفتح Visual Studio Code.

  2. في قائمة Visual Studio Code File ، حدد Open Folder.

  3. في مربع الحوار فتح مجلد ، انتقل إلى مجلد سطح مكتب Windows.

    إذا كان لديك موقع مجلد مختلف حيث تحتفظ بمشاريع التعليمات البرمجية، يمكنك استخدام موقع المجلد هذا بدلا من ذلك. لهذا التدريب، الشيء المهم هو أن يكون لديك موقع يسهل تحديد موقعه وتذكره.

  4. في مربع الحوار فتح مجلد ، حدد تحديد مجلد.

    إذا رأيت مربع حوار أمان يسألك عما إذا كنت تثق بالمؤلفين، فحدد نعم.

  5. في قائمة Visual Studio Code Terminal ، حدد New Terminal.

    لاحظ أن موجه الأوامر في لوحة Terminal يعرض مسار المجلد للمجلد الحالي. على سبيل المثال:

    C:\Users\someuser\Desktop>
    

    إشعار

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

  6. في موجه الأوامر Terminal، لإنشاء تطبيق وحدة تحكم جديد في مجلد محدد، اكتب dotnet new console -o ./CsharpProjects/TestProject ثم اضغط على Enter.

    يستخدم أمر .NET CLI هذا قالب برنامج .NET لإنشاء مشروع تطبيق وحدة تحكم C# جديد في موقع المجلد المحدد. ينشئ الأمر مجلدات CsharpProjects وTestProject نيابة عنك، ويستخدم TestProject كاسم لملفك .csproj .

  7. في لوحة EXPLORER، قم بتوسيع المجلد CsharpProjects .

    يجب أن تشاهد مجلد TestProject وملفين، ملف برنامج C# المسمى Program.cs وملف مشروع C# يسمى TestProject.csproj.

  8. في لوحة EXPLORER، لعرض ملف التعليمات البرمجية في لوحة المحرر، حدد Program.cs.

  9. حذف أسطر التعليمات البرمجية الموجودة.

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

  10. أغلق لوحة Terminal.

إنشاء متغير داخل كتلة التعليمات البرمجية

ستبدأ بالنظر إلى الحالة عند تهيئة متغير داخل كتلة التعليمات البرمجية.

  1. تأكد من فتح Visual Studio Code وعرضه Program.cs في لوحة المحرر.

    إشعار

    يجب أن يكون Program.cs فارغا. إذا لم يكن كذلك، فحدد جميع أسطر التعليمات البرمجية واحذفها.

  2. اكتب التعليمات البرمجية التالية في محرر Visual Studio Code:

    bool flag = true;
    if (flag)
    {
        int value = 10;
        Console.WriteLine($"Inside the code block: {value}");
    }
    
  3. في قائمة Visual Studio Code File ، حدد Save.

    يجب حفظ ملف Program.cs قبل إنشاء التعليمات البرمجية أو تشغيلها.

  4. في لوحة EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.

    سيتم فتح لوحة Terminal. يجب أن تتضمن المحطة الطرفية موجه أوامر يظهر أن المحطة الطرفية مفتوحة لموقع مجلد TestProject.

  5. في موجه الأوامر Terminal، لتشغيل التعليمات البرمجية، اكتب dotnet run ثم اضغط على Enter.

    إشعار

    إذا رأيت رسالة تقول "تعذر العثور على مشروع لتشغيله"، فتأكد من أن موجه الأوامر Terminal يعرض موقع مجلد TestProject المتوقع. على سبيل المثال: C:\Users\someuser\Desktop\csharpprojects\TestProject>

    ينبغي أن تشاهد المخرج التالي:

    Inside the code block: 10
    

هذا هو الإخراج المتوقع. ولكن ماذا لو كنت تريد الوصول إلى المتغير value خارج كتلة التعليمات البرمجية للبيانات if ؟

محاولة الوصول إلى متغير خارج كتلة التعليمات البرمجية التي تم الإعلان عنها

  1. في محرر التعليمات البرمجية Visual Studio، قم بإنشاء سطر تعليمة برمجية جديد أسفل كتلة التعليمات البرمجية للبيانات if .

  2. في سطر التعليمات البرمجية الفارغ الذي أنشأته، أضف السطر التالي من التعليمات البرمجية:

    Console.WriteLine($"Outside the code block: {value}");
    
  3. تحقق من أن التعليمات البرمجية المحدثة تبدو كما يلي:

    bool flag = true;
    if (flag)
    {
        int value = 10;
        Console.WriteLine($"Inside the code block: {value}");
    }
    Console.WriteLine($"Outside the code block: {value}");
    
  4. احفظ ملف التعليمات البرمجية، ثم استخدم Visual Studio Code لتشغيل التعليمات البرمجية الخاصة بك.

    أدخل dotnet run من موجه الأوامر Terminal لتشغيل التعليمات البرمجية الخاصة بك.

  5. لاحظ أنه عند محاولة تشغيل التطبيق، تحصل على خطأ في التحويل البرمجي:

    Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
    

Program.cs(7,46) يخبرك جزء الرسالة أن الخطأ مقترن بالخط 7 في ملف Program.cs، العمود 46.

يتم إنشاء هذا الخطأ لأن المتغير الذي تم الإعلان عنه داخل كتلة التعليمات البرمجية يمكن الوصول إليه فقط (يمكن رؤيته فقط) داخل كتلة التعليمات البرمجية هذه. نظرا لأنه لا يمكن الوصول إلى متغير خارج كتلة التعليمات البرمجية التي تم الإعلان عنها فيها، value لا يمكن الوصول إليه من السطر 7 من التعليمات البرمجية الخاصة بك.

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

نقل إعلان المتغير فوق كتلة التعليمات البرمجية

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

  1. تحديث التعليمات البرمجية الخاصة بك في محرر التعليمات البرمجية Visual Studio كما يلي:

    bool flag = true;
    int value;
    
    if (flag)
    {
        Console.WriteLine($"Inside the code block: {value}");
    }
    
    value = 10;
    Console.WriteLine($"Outside the code block: {value}");
    
  2. خذ دقيقة لمراجعة التحديثات.

  3. لاحظ أنه value تم الإعلان الآن (ولكن لم تتم تهيئته) خارج كتلة التعليمات البرمجية if .

  4. استخدم Visual Studio Code لحفظ التحديثات الخاصة بك، ثم قم بتشغيل التعليمات البرمجية الخاصة بك.

  5. لاحظ أنك لا تزال تحصل على خطأ في التحويل البرمجي.

    هذه المرة، عند محاولة تشغيل التطبيق، تحصل على خطأ التحويل البرمجي التالي:

    Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'
    

    يرتبط الخطأ بالخط 6 داخل كتلة التعليمات البرمجية لأنه value غير مضمن (لم يتم تعيين قيمة له). إذا كان سطر value = 10; التعليمات البرمجية موجودا فوق كتلة التعليمات البرمجية if للبيانات، فسيتم تحويل التطبيق برمجيا بشكل صحيح وسيكون كل شيء على ما يرام. ومع ذلك، نظرا لأنه value لم تتم تهيئته، لا يمكن الوصول إليه داخل كتلة التعليمات البرمجية.

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

تهيئة متغير كجزء من إعلان المتغير

  1. للتهيئة value كجزء من إعلان المتغير، قم بتحديث التعليمات البرمجية الخاصة بك كما يلي:

    bool flag = true;
    int value = 0;
    
    if (flag)
    {
        Console.WriteLine($"Inside the code block: {value}");
    }
    
    value = 10;
    Console.WriteLine($"Outside the code block: {value}");
    

    تعالج هذه التعليمة البرمجية خطأ التحويل البرمجي "المتغير المحلي غير المعين" عن طريق التهيئة value كجزء من إعلان المتغير الخاص بك.

  2. استخدم Visual Studio Code لحفظ التعليمات البرمجية وتشغيلها.

  3. لاحظ أنه الآن، عند تشغيل التطبيق، سترى الإخراج التالي:

    Inside the code block: 0
    Outside the code block: 10
    

فحص تفسير المحول البرمجي للتعليمات البرمجية الخاصة بك

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

خذ بعين الاعتبار نموذجي التعليمات البرمجية التاليين اللذين يبدو أنهما يخدمان نفس الغرض:

// Code sample 1
bool flag = true;
int value;

if (flag)
{
    value = 10;
    Console.WriteLine($"Inside the code block: {value}");
}

Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;

if (true)
{
    value = 10;
    Console.WriteLine($"Inside the code block: {value}");
}

Console.WriteLine($"Outside the code block: {value}");

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

بالنسبة لعينة التعليمات flag البرمجية الأولى، يفسر المحول البرمجي كمتغير منطقي يمكن تعيين قيمة إما true أو false. يخلص المحول البرمجي إلى أنه إذا كان flag ، valuefalseفلن تتم تهيئته عند تنفيذ الثانيConsole.WriteLine(). بشكل أساسي، يعتبر المحول البرمجي مساري تنفيذ التعليمات البرمجية التاليين ممكنين:

// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");

و

// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");

نظرا لأن المحول البرمجي يعتبر المسار الثاني احتمالا (لعينة التعليمات البرمجية 1)، فإنه ينشئ رسالة خطأ أثناء عملية الإنشاء. بالإضافة إلى ذلك، يحذرك محرر التعليمات البرمجية في Visual Studio Code من هذه المشكلة عن طريق عرض خط متعرج أحمر أسفل value (أسفل كتلة التعليمات البرمجية).

بالنسبة لعينة التعليمات البرمجية الثانية، يستنتج المتوافق أن محتويات if كتلة التعليمات البرمجية للبيانات سيتم تنفيذها دائما (true دائما true). لا ينشئ المحول البرمجي خطأ في البنية لأنه يفسر نموذج التعليمات البرمجية الثاني ليكون له مسار تنفيذ واحد كما يلي:

int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");

خلاصة

فيما يلي بعض الأمور المهمة التي يجب تذكرها حول كتل التعليمات البرمجية:

  • عند الإعلان عن متغير داخل كتلة التعليمات البرمجية، تكون رؤيتها محلية لكتلة التعليمات البرمجية هذه ولا يمكن الوصول إلى هذا المتغير خارج كتلة التعليمات البرمجية.
  • للتأكد من أن المتغير مرئي داخل كتلة التعليمات البرمجية وخارجها، يجب تعريف المتغير قبل كتلة التعليمات البرمجية (خارج كتلة التعليمات البرمجية وفوقها).
  • تأكد من تهيئة المتغيرات قبل أن تحاول التعليمات البرمجية الوصول إليها (لجميع مسارات تنفيذ التعليمات البرمجية المحتملة).

‏‫اختبر معلوماتك

1.

يكتب المطور بعض التعليمات البرمجية التي تتضمن كتلة التعليمات البرمجية للبيانات if . يقومون بتهيئة متغير عدد صحيح واحد إلى قيمة 5 أعلاه (خارج) كتلة التعليمات البرمجية. يقومون بتهيئة متغير عدد صحيح ثان إلى قيمة 6 في السطر الأول داخل كتلة التعليمات البرمجية. يتم تقييم التعبير المنطقي لكتلة التعليمات البرمجية إلى true إذا كان متغير العدد الصحيح الأول له قيمة أكبر من 0. في السطر الثاني داخل كتلة التعليمات البرمجية، يقومون بتعيين مجموع القيمتين إلى المتغير الأول. في السطر الأول بعد كتلة التعليمات البرمجية، يكتبون التعليمات البرمجية لعرض قيمة العدد الصحيح الأول. ما هي النتيجة عند تنفيذ عبارة التعليمات البرمجية المستخدمة لعرض العدد الصحيح الأول؟