تظليل المتغيرات في `if`
جزء من قسم Fundamentals في رحلة GO على Coddy — الدرس 37 من 109.
دعونا نتعلم عن تظليل المتغيرات (variable shadowing) في جمل if. يتيح لك هذا إنشاء متغير موجود فقط داخل كتلة if والكتل المرتبطة بها من نوع else.
أولاً، لنقم بإنشاء متغير خارج جملتنا الشرطية:
x := 10
fmt.Println("Original x value:", x)بعد تنفيذ هذا الكود، سيكون لدينا متغير x بقيمة 10 يمكننا استخدامه في جميع أنحاء برنامجنا.
الآن، دعونا نستخدم تظليل المتغيرات (variable shadowing) في جملة if لإنشاء متغير جديد يوجد فقط داخل تلك الكتلة البرمجية:
if y := x * 2; y > 15 {
fmt.Println("y is greater than 15:", y)
// y يوجد فقط في هذه الكتلة
} else {
fmt.Println("y is not greater than 15:", y)
// y متاح أيضاً في كتل else
}بعد تنفيذ هذا الكود، سيقوم Go بحساب y كـ 20 (والذي هو x * 2)، والتحقق مما إذا كان أكبر من 15، ثم تنفيذ الكتلة البرمجية الأولى. سيظهر المخرج على الشاشة:
y is greater than 15: 20أخيرًا، دعنا نحاول الوصول إلى متغيراتنا بعد جملة if:
// fmt.Println(y) سيؤدي إلى حدوث خطأ - y غير موجود هنا
fmt.Println("x is still:", x)بعد تنفيذ هذا الكود، لا يزال بإمكاننا الوصول إلى x، ولكن y لم يعد متاحاً لأنه كان موجوداً فقط داخل كتل if و else. سيظهر المخرج على الشاشة:
x is still: 10يوضح هذا كيفية عمل تظليل المتغيرات (variable shadowing) في جمل if - المتغير y متاح فقط داخل الكتل الشرطية التي تم التصريح عنه فيها.
التحدي
مبتدئفي هذا التحدي، ستتدرب على تظليل المتغيرات (variable shadowing) في جملة if. سترى كيف يمكن لمتغير تم التصريح عنه داخل كتلة if أن يحمل نفس اسم متغير في النطاق الخارجي، ولكن بقيمة مختلفة.
يحتوي الكود على متغير message في النطاق الخارجي. مهمتك هي إنشاء متغير مظلل بنفس الاسم داخل كتلة if ثم طباعة كلا المتغيرين لرؤية تأثير التظليل.
ورقة مرجعية
يتيح لك تظليل المتغيرات (Variable shadowing) في جمل if إنشاء متغيرات توجد فقط داخل الكتلة الشرطية وكتل else المرتبطة بها.
بناء الجملة (Syntax) لتظليل المتغيرات في جمل if:
if variable := expression; condition {
// المتغير موجود فقط في هذه الكتلة
} else {
// المتغير متاح أيضًا في كتل else
}مثال:
x := 10
if y := x * 2; y > 15 {
fmt.Println("y is greater than 15:", y)
} else {
fmt.Println("y is not greater than 15:", y)
}
// لا يمكن الوصول إلى y هنا بعد الآن
fmt.Println("x is still:", x)المتغير المظلل متاح فقط داخل كتل if و else حيث تم التصريح عنه، وليس خارجها.
جرّب بنفسك
package main
import "fmt"
func main() {
// متغير النطاق الخارجي
message := "Hello from outer scope"
isLoggedIn := true
if isLoggedIn {
// TODO: قم بإنشاء متغير جديد باسم 'message' بالقيمة "Hello from inner scope"
// هذا يطبع رسالة النطاق الداخلي
fmt.Println(message)
}
// هذا يطبع رسالة النطاق الخارجي
fmt.Println(message)
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4معاملات المقارنة والمعاملات المنطقية
معاملات المقارنة - الجزء 1معاملات المقارنة - الجزء 2معامل AND المنطقيمعامل OR المنطقيمعامل NOT المنطقيأساسيات أولوية المعاملاتملخص - إجراء المقارنات7تدفق التحكم: الحلقات التكرارية
شرح حلقة `for`حلقة `for` - أساسياتحلقة `for` - بشرط فقطالكلمة المفتاحية `break`الكلمة المفتاحية `continue`الحلقات المتداخلةملخص - تكرار العمليات2المتغيرات وأنواع البيانات الأساسية
ما هو المتغير؟استنتاج النوع باستخدام `:=`الأعداد الصحيحة (int)أرقام الفاصلة العائمةالقيم المنطقية (Booleans)النصوص (Strings)القيم الصفريةالثوابتقواعد التسميةملخص - المتغيرات والأنواع5الإدخال والإخراج الأساسي
المخرجات المنسقةرموز التنسيقطباعة الأنواعالحصول على مدخلات المستخدم الأساسيةملخص - الإدخال والإخراج8الدوال
فهم الدوالالتصريح عن دالةاستدعاء الدوالمعاملات الدالةإرجاع قيمة واحدةإرجاع قيم متعددةقيم الإرجاع المسماةأساسيات نطاق الدالةملخص - إنشاء كود قابل لإعادة الاستخدام3المعاملات الأساسية
المعاملات الحسابيةمعامل القسمةمعامل باقي القسمةمعامل التعيينمعاملات التعيين المركبةالزيادة والنقصانملخص - الحسابات6تدفق التحكم: الجمل الشرطية
جملة `if`الكلمة المفتاحية `else`الكلمة المفتاحية `else if`تظليل المتغيرات في `if`تهيئة المتغيراتجملة `switch``switch` مع التعبيرات`switch` بدون تعبيرالكلمة المفتاحية `fallthrough`ملخص - اتخاذ القرارات