النطاق ودورة الحياة
افهم أماكن ظهور المتغيرات (النطاق) والمدة التي تبقى فيها موجودة (دورة الحياة): الكتل، والحلقات، والدوال، والحقول، وحجب الأسماء، والمعلمات final.
النطاق ودورة الحياة درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 3 دروس في المجموع.
النطاق مقابل العمر
النطاق هو الموضع الذي يظهر فيه اسم المتغير. أما العمر فهو المدة التي يظل فيها المتغير موجودًا. سترون نطاق الكتل، ونطاق الحلقات، والمتغيرات المحلية للدوال، وحقول الفئات، وقواعد حجب الأسماء.
نطاق الكتلة
نطاق الكتلة: المتغير المعرّف داخل الأقواس المعقوفة لا يكون ظاهرًا إلا داخل تلك الأقواس.
public class Main {
public static void main(String[] args) {
int a = 10; // visible in main
{
int b = 20; // visible only inside this block
System.out.println("inside block: a=" + a + ", b=" + b);
}
System.out.println("outside block: a=" + a);
// System.out.println(b); // would NOT compile: b is out of scope
}
}
نطاق الحلقة
نطاق الحلقة: فهرس الحلقة المعرّف في ترويسة for لا يكون ظاهرًا إلا داخل جسم الحلقة.
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 3; i = i + 1) {
System.out.println("i in loop = " + i);
}
// System.out.println(i); // would NOT compile: i is scoped to the loop
int j;
for (j = 0; j < 2; j = j + 1) {
System.out.println("j in loop = " + j);
}
System.out.println("j after loop = " + j); // OK: j declared outside
}
}
الحقول مقابل المتغيرات المحلية
العمر: تظل حقول الفئة وstatic موجودة عبر الاستدعاءات، بينما يُنشأ المتغير المحلي من جديد عند كل استدعاء، ثم يُتخلّص منه عند انتهاء الدالة.
public class Main {
// static field (class-level): lives for the program lifetime
static int counter = 0;
static void tick() {
int local = 100; // local: created each call, dies when method returns
counter = counter + 1;
System.out.println("tick: counter=" + counter + ", local=" + local);
}
public static void main(String[] args) {
tick();
tick();
tick();
System.out.println("final counter=" + counter);
}
}
حجب الأسماء
حجب الأسماء: يمكن لتعريف داخلي، مثل معامل أو متغير محلي، أن يحجب اسمًا خارجيًا له المعرّف نفسه. استخدموا ClassName.field، أو this.field في دوال الكائن، للوصول إلى الحقل المحجوب.
public class Main {
static String label = "FIELD"; // class field
static void demo(String label) { // parameter shadows field name
System.out.println("param label = " + label); // uses parameter
{
String labelInner = "INNER"; // new name in inner block
System.out.println("inner block labelInner = " + labelInner);
System.out.println("still param label = " + label);
}
System.out.println("field via class name = " + Main.label); // refer to field explicitly
}
public static void main(String[] args) {
demo("PARAM");
}
}
final والتمرير بالقيمة
لا يمكن إعادة إسناد معاملات final. تستخدم Java التمرير بالقيمة: إعادة إسناد المعامل لا تغيّر متغير المستدعي.
public class Main {
// final parameter cannot be reassigned inside the method
static int inc(final int n) {
// n = n + 1; // would NOT compile if uncommented
return n + 1; // safe: return a new value
}
static void reassign(int x) {
x = 999; // reassignes the local copy; caller variable is unchanged
}
public static void main(String[] args) {
int a = 5;
int b = inc(a);
System.out.println("a=" + a + ", b=inc(a)=" + b);
reassign(a);
System.out.println("after reassign(a): a is still " + a);
}
}
التحقق من النطاق والعمر
تحقق سريع: أي عبارة عن النطاق والعمر صحيحة؟
مراجعة والخطوة التالية
مراجعة: تدرّبتم على نطاق الكتل والحلقات، والحقول مقابل المتغيرات المحلية، وحجب الأسماء، ومعاملات final. الخطوة التالية: الانتقال إلى أنماط التصميم وإعادة الاستخدام في A2.2.
الأسئلة الشائعة
هل درس «النطاق ودورة الحياة» مجاني؟
نعم — نص درس «النطاق ودورة الحياة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 3 دروس في المجموع.
ماذا ستتعلم في «النطاق ودورة الحياة»؟
افهم أماكن ظهور المتغيرات (النطاق) والمدة التي تبقى فيها موجودة (دورة الحياة): الكتل، والحلقات، والدوال، والحقول، وحجب الأسماء، والمعلمات final. تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «النطاق ودورة الحياة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف الدوال والمعلمات
- القيم المُعادة والتحميل الزائد
- النطاق ودورة الحياة