_:nf02d7f729bb345fabeadaad008b4901axb0
<http://schema.org/articleBody>
"\nرمز فتح مرحلة هذا الدرس في تطبيق طورني : BVP\n\n\n\n\nhttps://www.youtube.com/watch?v=-KIycFnopZY\n\n\n\n\n تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C -&nbsp; النطاق Scope \n\n\n\nلماذا عندما نقوم بتتعريف متغير جديد ، لان نستطيع استخدامه في كل التطبيق ؟ ما هو الـ scope  ؟ و ما هو النطاق الخاص بالمتغير ؟ و متى  ينتهي المتغير و يتم حذفه من الذاكرة ؟\n\n\n\nفي درس اليوم سوف نتكلم عن النطاقات Scopes  و أهميتها ، و ذكرنا سابقاً أننا سنقوم بشرحها مستقبلاً بشكل مكثف ، لدينا الآن برنامج Visual Studio 2019 Community و هو مجاني كما ذكرنا سابقاً، بإمكاننا عمل مشروع جديد من خلال Create new project و نقوم باختيار الـ Console app ثم الضغط على next و في الصفحة التالية نقوم بكتابة اسم مشروع ، و ليكن UnderstandingSscope ، سيفتح لنا النافذة الرئيسية للكود \n\n\n\nالشيء الذي نريد إيصاله أنه عندما نقوم بتعريف متغير جديد ، فإنه سيكون متاحاً في القطعة البرمجية الموجود فيها حصراً ، أو كل القطع البرمجية الموجودة داخلها . و قد تكلمنا سابقاً أن القطعة البرمجية هي القطعة المحصورة بين القوسين {      } ، سنقوم الآن بعمل حلقة for loop \n\n\n\n  \n\n\n\nفهم النطاق\n\n\n\nاذا قمنا بتنفيذ المشروع ، فسنرى أنه قام بطباعة الأعداد من 0 إلى 9 كما هو المعتاد ، لكن لنلاحظ التالي  ، لو قمنا بأخذ الجملة  Console.WriteLine(i.ToString()); و كتابتها خارج القطعة البرمجية الموجودة فيها ( أي خارج القطعة الخاصة بالحلقة for loop ) ، يصبح الكود بالشكل :\n\n\n\n\n\n\n\nفنلاحظ أنه مباشرة سيظهر لدينا خطأ في قائمة الأخطاء ، و يقول الخطأ ، “the name does not exist in current context” ، بما معناه أن المتغير لا يمكن التعرف عليه في هذه المنطقة لأن الـ i حصراً لتلك القطعة البرمجية لأنها داخل نطاق الحلقة التكرارية ، بالتالي فإنه  فعلياً غير موجود في القطعة البرمجية الأخرى ، و لن يتم التعامل معه . سنقوم بجعل الجملة الخاطئة جملة تعليق . و سنقوم بعمل متغير جديد باسم j في القطعة الأولى ، و التي تحتوي على الحلقة for loop و نقوم بإسناده داخل القطعة البرمجية التابعة للحلقة for loop ، ثم نقوم بكتابة الجملة لتقوم بطباعة المتغير j خارج الحلقة for loop  ليصبح الكود كالتالي :\n\n\n\n\n\n\n\nثم نقوم بتنفيذ البرنامج … نلاحظ أنه يخبرنا في النهاية أن j  تحصل على القيمة 9 ، نلاحظ أنه قمنا بتعريف المتغير j في القطعة الخارجية .. إذا لن يحدث أي خلل سواء استعملته في القطعة الداخلية  أو في نفس القطعة التي قمت بتعريفه داخلها . \n\n\n\nالنطاق على مستوى ال Class\n\n\n\n\n\nسنقوم بتعريف property جديدة من النوع String Private static string k =” “ ;  و في الداخل ستكون قيمة k الجديدة ستكون هي قيمة i ، و سنقوم في الخارج بطباعة قيمة k الجديدة كما قمنا بطباعة قيمة j سابقاً ، بتنفيذ البرنامج نلاحظ أنه يعطيني نفس النتيجة النهائية . الشيء الذي نريد توضيحه أنه بحال قمت بتعريف method على مستوى الكلاس ، مثلا :\n\n\n\n\n\n\n\n\n\nو قمنا باستدعاء الـ HelperMethod في الأعلى ، ثم قمت بتنفيذ المشروع ، نلاحظ أن القيمة النهائية هي 10 ، لأن المتغير k  على مستوى الكلاس ، فيمكنني استخدامه في أي منطقة داخل الكلاس ، و أنا قمت باستخدامه داخل method  لأقوم بالتعديل عليه ، أيضا في جملة التكرار for سأقوم بوضع جملة شرطية ، في حال كان قيمة i هي 9  قم بتعريف متغير ، string l =” “ ; ، ثم نقوم مباشرة بطباعة هذا المتغير خارج اقواس الحلقة for loop  ، مباشرة سيعطيني أن هناك خطأ … فهذا المتغير تم تعريفه في قطعة برمجية داخلية ، فهذا المتغير عندما يصل إلى نهاية القوس سينتهي و يختفي من الذاكرة ويكون خارج النطاق فلا يمكن استخدامه خارج هذه الاقواس . اذاً هناك نطاق لكل متغير ، ولا يمكن استخدامه خارج هذا النطاق ، و هذا الكلام ليس محصوراً فقط للمتغيرات ، فعندما نقوم باستنساخ مجسم من كلاس ، ينطبق عليه كل ما قمنا بتطبيقه في هذا الدرس ، هذا كان بشكل سريع ملخص لمفهوم النطاقات scopes . نراكم ان شاء الله في درس قادم قريباً . السلام عليكم .\n\n\n\nالأسطر البرمجية التي قمنا بتنفيذها في هذا الدرس\n\n\n\n\n"
<https://6wrni.com/csharp-scope/>