اسکوپ (Scope)
اسکوپ جاوا یعنی محدوده دیده شدن متغیرها. متغیر (Variable) یعنی جعبه داده. هر متغیر فقط در محدوده خودش قابل استفاده است. بیرون محدوده کار نمی کند.
اسکوپ جاوا چیست؟
در جاوا، متغیرها فقط داخل ناحیه ساخته شده در دسترس اند. به این ناحیه اسکوپ می گوییم.
Method Scope
متغیرهای داخل متد، از بعد تعریف شدن تا انتهای همان متد در دسترس اند.
public class Main {
public static void main(String[] args) {
// Code here CANNOT use x
int x = 100;
// Code here CAN use x
System.out.println(x);
}
}
Block Scope
بلوک کد یعنی بخش بین آکولاد { } . متغیر داخل بلوک فقط همان جا در دسترس است.
public class Main {
public static void main(String[] args) {
// Code here CANNOT use x
{ // This is a block
// Code here CANNOT use x
int x = 100;
// Code here CAN use x
System.out.println(x);
} // The block ends here
// Code here CANNOT use x
}
}
نکته: بلوک می تواند مستقل باشد یا داخل if، while یا for بیاید. در حلقه for، متغیر سرآیند حلقه فقط همان جا وجود دارد.
Loop Scope
متغیرهای تعریف شده در سرآیند یا داخل حلقه، فقط داخل همان حلقه هستند.
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// i is NOT accessible here
}
}
- حلقه for خودش یک بلوک دارد.
- i فقط داخل همان بلوک حلقه قابل دسترس است.
- پس از پایان حلقه، i نابود می شود.
چرا مهم است؟
متغیرهای حلقه بیرون حلقه نیستند. بنابراین می توانی نام i را دوباره استفاده کنی.
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println("Loop 1: " + i);
}
for (int i = 0; i < 2; i++) {
System.out.println("Loop 2: " + i);
}
}
}
Class Scope
متغیرهای تعریف شده داخل کلاس و بیرون متدها را همه متدهای کلاس می بینند.
public class Main {
int x = 5;
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.x);
}
}
نکته: درباره کلاس ها و اشیاء، بعداً در بخش های OOP می بینی.
گام های عملی
- یک متغیر داخل متد تعریف کن.
- آن را بیرون متد صدا بزن و خطا را ببین.
- متغیر را سراسریِ کلاس کن و دوباره امتحان کن.
نکته: برای مرور بیشتر، به اسکوپ جاوا برگرد. همچنین بخش های متدها و سربارگذاری متد را ببین.
جمع بندی سریع
- متغیر فقط در اسکوپ خودش دیده می شود.
- اسکوپ متد داخل همان متد است.
- اسکوپ بلوک داخل آکولادهاست.
- متغیر حلقه بیرون حلقه نیست.
- متغیر کلاس را همه متدها می بینند.