مرحبا ، مرحبا بعودتك.
في هذه المحاضرة أريد أن أتحدث حول المتغيرات المحلية والعالمية.
هذا هو حقا مفهوم الوظيفة النطاق أو في نطاق البرنامج العام.
يتعلق الأمر بالوقت يمكنك استخدام المتغيرات وعندما
لا يمكنك استخدامها.
نحن نعلم ما هي الوظائف.
لذا الآن أريد أن أتحدث حول المتغيرات المحلية.
المتغيرات المحلية يجب أن تفعل مع أكثر من مجرد وظائف بالرغم من ذلك.
المتغيرات المحلية لها علاقة أي شيء يحتوي على كتلة من التعليمات البرمجية.
لذلك تم تعريف المتغيرات في الداخل من وظيفة تعرف باسم المتغيرات
المحلية التلقائية.
لذلك في تلك الوظيفة الجسم ، بين تلك الأقواس التي تبدأ وتنتهي
، إذا قمت بتعريف متغير ، فهذا المتغير هو متغير محلي.
سيتم إنشاؤه تلقائيًا في كل مرة يتم استدعاء الوظيفة.
أيضا ، أي قيم في الوصول إلى هذا المتغير محلي
فقط للوظيفة.
لا يمكنك الوصول إلى هذا المتغير خارج هذه الوظيفة.
لذلك لا يمكن الوصول إلى المتغير في وظائف أخرى إذا كانت
محلية لوظيفة معينة.
يمكن الوصول إليه فقط من حيث تم تعريفه.
إذا تم إعطاء قيمة أولية إلى متغير داخل دالة
، هذه القيمة الأولية هي يتم تخصيصه للمتغير في كل مرة يتم استدعاء
الوظيفة.
إذا كنت تريد الاحتفاظ بقيمة في متغير في كل استدعاء لاحق ،
هناك طريقة يمكنك فعل ذلك في c ، يُشار إليه على أنه
متغير ثابت داخل دالة.
هذا ، مرة أخرى ، أكثر من تقدم مفهوم ليس في فئة المبتدئين
، ولكنها طريقة يمكنك القيام بها لديك بالفعل بيانات مختلفة في
كل مرة تقوم فيها باستدعاء الوظائف.
لذلك إذا أردت على سبيل المثال الاحتفاظ بها عداد لعدد المرات التي تم فيها
استدعاء دالة ، سوف تعلن عن متغير محلي داخل اسم الوظيفة
ثابت ، مع كلمة أساسية ثابتة.
لكن بدون مجرد منتظم المتغيرات المحلية سيكون
لها قيم جديدة في كل مرة.
يمكنك استخدام الكلمة الأساسية التلقائية من قبل نوع البيانات ، لكنها ليست ضرورية.
إنها تجعلها ملف قليلا أكثر دقة.
سيقوم المترجم بإضافته بواسطة الافتراضي إذا لم تقم بتضمينه.
ولكن إذا قمت بتضمينه ، فسيكون كذلك
سأجعله أكثر دقة ، إنه ليس ضروريًا.
لذلك يطلق عليه المتغير المحلي التلقائي.
توجد كلمة أساسية تسمى auto في c ، ولكنك لست بحاجة إلى تقديمه
افتراضيًا ، ولهذا السبب لا تراها في الكثير من الأمثلة
حيث يتم تعريف المتغيرات وأعلن داخل وظيفة.
المتغيرات المحلية قابلة للتطبيق أيضا أي كود يتم فيه إنشاء المتغير
في عبارات block أو loops أو if.
مرة أخرى ، إذا كان لديك عبارة if في ما هي كتلة عبارة if ، حيث
تبدأ الأقواس فقط.
يشار إلى ذلك على أنه كتلة.
يمكن أن تكون الكتل في وظائف ، يمكن أن تكون الكتل عبارة عن عبارات
، يمكن أن تكون الكتل في حلقات.
يمكن أن تكون الكتل في أي مكان هناك أقواس ، في الأساس.
في أي مكان يوجد بين قوسين وتقوم بإنشاء هذا المتغير.
إنشاء المتغير يعلن وربما تحديد قيم لها.
ولكن إذا أعلنت عن هذا المتغير ، يمكنك إنشاء هذا المتغير
داخل كتلة ، يمكنك فقط استخدام هذا المتغير داخل الكتلة.
إذا حاولت الوصول إلى ذلك متغير خارج الكتلة ، فلن
يتم استخدامه.
لذلك إذا كان لديك عبارة if ، داخل تعليمة if تعلن
عن متغير ، يمكنك الوصول إليه هذا المتغير خارج كتلة تعليمة if
، كما هو الحال مع الحلقات.
انه مهم جدا لفهم هذا.
المترجم سوف يشتكي ويعطيك خطأ إذا حاولت
الوصول إليه في مكان آخر.
وما يعنيه هذا هو القيم الموجودة في البيانات قابلة للتطبيق
فقط على تلك الكتلة.
أنت لا تشارك أي بيانات.
المتغيرات العالمية هي عكس متغير محلي.
يمكن الوصول إلى المتغيرات العالمية بأي وظيفة في البرنامج.
الطريقة التي تنشئ بها ملف المتغير هو وضعه في الأعلى
خارج أي دالة.
لذلك تم الإعلان عن المتغيرات العالمية خارج الوظيفة ولا
تنتمي إلى أي وظيفة.
تذكر ، الكلمة الرئيسية الرئيسي هو وظيفة.
لذلك أي متغيرات محددة في لا يمكن الوصول إلى الوظيفة الرئيسية
إلا في الوظيفة الرئيسية.
لذا فإن المتغيرات الرئيسية وظيفة لا يمكن الوصول إليها
في أي وظائف أخرى.
إذا كنت تريد متغيرًا تستخدمه جميع الوظائف ، فأنت تضع المتغير خارج
الدالة ، عادةً في الجزء العلوي من الملف المصدر وعادةً
ما يتم وضع علامة عليه كـ قائلا أن هذا متغير عالمي.
المتغير العالمي كذب ل البرنامج بأكمله من وقت بدء البرنامج إلى
متى يتوقف ، سيتم وضع هذا المتغير العام في
الذاكرة.
يمكن لأي وظيفة في البرنامج تغيير قيمة هذا المتغير الشامل لأن لديهم الوصول إليه ،
يمكنهم تعديله.
ولذا يجب أن تبدأ في التفكير حول نجاح باهر الذي يبدو نوعًا من الخطورة لأنه لديك الآن
رمز يمكنه الوصول إلى نفس البيانات في أي مكان
، لكننا سنصل إلى ذلك.
إذا كان هناك متغير محلي معلن في وظيفة
تحمل نفس اسم متغير عام ، ثم هذا ستستخدم الدالة المتغير المحلي ، وستخفي المتغير
العام.
لذلك إذا كان لديك متغير عالمي اسمه x ولديك متغير محلي
اسمه x داخل دالة ، المحلية المتغير سيكون له الأسبقية.
لن يتم تعديله بيانات المتغيرات العالمية.
إذا قمت بتعيين ذلك متغيرًا ، فسيتم
تعديل المتغير المحلي فقط.
لذا فإن المتغير العالمي ليس كذلك يمكن الوصول إليه عندما يكون لديك
نفس الاسم ، ولن يكون متاحًا في الواقع يمكن الوصول إليها من خلال تلك الوظيفة
المحلية ، لذلك لا تستخدم نفس الشيء الأسماء أساسًا لأنها
ستكون مربكة.
للأشخاص الذين قاموا ببرمجة الكثير من المبرمجين المتقدمين
لاحظوا ذلك على الفور.
سيقولون مرحبًا هذا فقط إنها مجرد تعديل لمتغير
محلي حتى لو رأوا ملف فعل عالمي بنفس الاسم.
لكن بالنسبة للمبتدئين ، إنه ليس دائما واضحا جدا.
اسمحوا لي أن أقدم لكم مثالا.
هنا في هذا المثال ، نحن إنشاء متغير عام في الجزء العلوي
قبل الوظيفة الرئيسية.
والطريقة التي تريد أن تنظم بها عادة ما يتضمن برنامجك عبارات
في الأعلى بعد بعضها التعليقات ربما ، وبعد ذلك قد يكون لديك بعض الثوابت المحددة ثم
أنت سيكون لديك المتغيرات العالمية الخاصة بك.
المتغيرات العالمية تبدو فقط مثل المتغيرات العادية.
إنه مكان وجودهم فقط أعلن في الواقع.
إذا تم الإعلان عنهم خارج دالة ، فهي إذن عالمية.
إذن في هذا المثال لدينا المتغير العام يسمى عالمي.
نحن بصدد تهيئته إلى 0.
يمكننا أيضًا تهيئة هذه المتغيرات العالمية في أي مكان.
يمكننا تهيئتها عندما نعلن عنها أو يمكننا
تهيئتها في أي وظيفة.
إنه عدد صحيح.
لدينا أيضًا وظيفتان ، الوظيفة الرئيسية
في وظيفة تسمى وظيفتي.
في الداخل لدينا محلي المتغيرات التي يمكن الوصول إليها
فقط داخل تلك الوظائف.
في الوظيفة الرئيسية ، لدينا رئيسي محلي.
يمكنك فقط الوصول إلى بلدي المحلي الرئيسية داخل الوظيفة الرئيسية.
ولكن لأن عالمي الخاص بي هو متغير هذا عالمي ، يمكنك أيضًا الوصول إليه
في الوظيفة الرئيسية.
لذلك يمكن أن يصل الرئيسي إلى اثنين المتغيرات المحلية والعالمية.
ودالتي لها متغير محلي اسمه x لأنه مُعلن داخل أقواس
جسم الوظيفة ويمكننا بالفعل الوصول إلى المتغير العام
الذي هو عالمي.
يمكننا أيضًا الوصول إلى x ، لكن لا يمكننا الوصول إلى بلدي المحلي.
يجب أن أقول بلدي الرئيسي المحلي.
لأن بلدي الرئيسي المحلي هو فقط داخل الوظيفة الرئيسية.
ليس لدينا وصول إلى ذلك.
إذا حاولنا أن أكتب أو نقرأ المتغير الرئيسي المحلي
داخل وظيفتي ، المترجم هو سأعطيك خطأ.
عليك أن تفهم هذا مفهوم محلي مقابل عالمي.
المحلية هي داخل كتل من التعليمات البرمجية.
عندما يتم الإعلان عنهم ، يمكنك ذلك استخدمها فقط في الكتلة.
إذا كان المتغير خارج الكتلة وهي فقط في وظيفة أو في البرنامج نفسه
فقط ، يمكنك الوصول إليه في أي وظيفة.
يجب تجنب المتغيرات العالمية.
المتغيرات العالمية نوع من الأشياء السيئة.
سبب لهم العالمية المتغيرات سيئة ولماذا يجب أن
تتجنبها لأنها يعزز الاقتران بين الوظائف.
ماذا يعني الاقتران؟
اقتران يعني التبعيات.
إذا كان لديك متغير عام ويتم استخدامه من قبل
أربع وظائف ، وهذا يعني كل واحدة من هذه الوظائف يمكن أن تعتمد
على وظيفة أخرى.
ما الخطأ في التبعية؟
التبعية تؤدي إلى وجود برنامج أصعب بكثير في تصحيح الأخطاء والعثور على الأخطاء.
إذا كان لديك خطأ في برنامجك وأنت تستخدم متغيرًا عامًا والمتغير
العام هو السبب الخطأ ، الآن يمكن أن يكون هذا الخطأ في أي مكان في أي
وظيفة باستخدام هذا المتغير الشامل.
إنه يعقد الأمور عندما يكون لديك بيانات عالمية.
لديك متغير عالمي ، يمكن أن يكون يمكن تعديلها في الوظيفة الأولى ، الوظيفة الثانية
، الوظيفة الثالثة ، الوظيفة الرابعة.
أنت لا تقيد الوصول إلى ذلك. إنه أيضًا صعب جدًا بمجرد العثور على
الخطأ و إذا قمت بعزله ، فقد يكون من الصعب
جدًا إصلاحه.
لأنه الآن عند إصلاحه ، يمكنك ذلك يسبب مشاكل في وظائف أخرى
بسبب هذه التبعيات.
يجب أن تكون المتغيرات العالمية تجنبها قدر الإمكان
بسبب هذا الاقتران ، بسبب هذه التبعيات.
هناك أوقات قد تحتاج فيها لاستخدامه ، لكن يجب تجنبه.
وتذكر أكثر اللغات الحديثة في معظم اللغات الموجهة للكائنات
مثل c ++ وجافا ، ليس لديهما حتى مفهوم المتغير
الشامل.
لديهم متغيرات ثابتة يمكن أن تكون متغيرات فئة ، لكنها
لا تزال مغلفة داخل الفصل.
لأن البيانات العالمية من هذا القبيل شيء سيء ، اللغات الجديدة
تحاول في الواقع منعها.
ويجب أن تحاول تجنب ذلك لأنه يعقد برنامجك ويجعله
فقط يصعب العثور على الأخطاء وتصحيحها.
بدلا من استخدام العالمية البيانات ، قم بتمرير البيانات إلى الوظائف.
إذا كانت الوظيفة تحتاج إلى الوصول لبعض البيانات ، قم بتمريرها إليها.
إذا - إذا كان هناك الكثير من البيانات وأنت لا تفعل ذلك تريد الحصول على الكثير من المعلمات
، من الناحية النظرية ، لا يجب عليك أبدًا لديها أكثر من خمس معلمات.
هناك كتاب رائع هناك يسمى رمز نظيف يتحدث عن جودة الكود والأشياء
التي يجب تجنبها أشياء يجب تجنبها مثل المتغيرات العالمية.
يتحدث أيضا عن كيف يجب أن يكون لديك العديد من
المعلمات في وظائفك.
وإذا كانت الوظيفة تحتوي على 20 معلمة ، إنها إشارة إلى وجود خطأ ما
، ويرجع ذلك أساسًا إلى هذه الوظيفة ربما يفعل الكثير.
ولكن يمكن للدالة الوصول إلى البيانات بمجرد تمرير البيانات إليه ويمكنك تقييد استخدام
البيانات العالمية.
وللحصول على وظيفة تتطلب الكثير من البيانات ، يمكنك استخدام
شيء يسمى الهيكل الذي لم نتحدث عنه ولكن هذه طريقة أخرى للقيام بذلك.
لذلك لا تستخدم البيانات العالمية كثيرًا ممكن فقط عند الضرورة.
تأكد من أنك تفهم الرمز.
تأكد من توثيقك إنها حقًا جيدة حقًا.
حتى أن شخص آخر يبحث في الكود يعلم على الفور
أنك تستخدم بيانات عالمية ويعرف كيف يعمل كل شيء.
هذا هو مفهوم نطاق الوظيفة.
يجب أن تفهم هذا ، لذا انتبه إلى كل هذه الشرائح.
وسنستخدم أيضًا البعض البيانات العالمية وبعض البيانات المحلية
في التحدي القادم. شكرًا لك.