نحوه ایجاد متغیرهای سراسری
متغیرهای سراسری متغیرهایی هستند که از هر جایی در برنامه قابل دسترسی هستند. به عبارت دیگر، دامنه آنها کل کاربرد است. برای ایجاد چنین متغیری در جاوا، باید یک متغیر استاتیک عمومی در یک کلاس عمومی ایجاد کنید:public class Example {
public static int a;
public static int b;
public static String str;
}
متغیرهای a
و b
- str
جهانی شده اند. ما می توانیم مستقیماً از کلاس های دیگر داخل برنامه به آنها دسترسی داشته باشیم:
public class GlobalVarsDemo {
public static void main(String[] args) {
Example.a = 4;
Example.b = 5;
Example.str = "Global String variable value";
System.out.println(Example.a);
System.out.println(Example.b);
System.out.println(Example.str);
}
}
اگر متد را اجرا کنیم main
، خروجی زیر را خواهیم دید:
4
5
Global String variable value
متغیرهای جهانی را می توان به 2 نوع تقسیم کرد:
- متغیرهای قابل ویرایش؛
- متغیرهایی که فقط قابل خواندن هستند.
final
و هنگام تعریف متغیر، یک مقدار به آن اختصاص دهید:
public class Constants {
public static final double PI = 3.1415926535897932384626433832795;
public static final String HELLO_WORLD_STR = "Hello, World!";
}
طبق قرارداد نامگذاری جاوا، همه ثابت ها باید با حروف بزرگ نامگذاری شوند و کلمات را با یک کاراکتر زیر خط جدا کنند. بنابراین، ما ثابت ها را ایجاد کرده ایم، و اکنون نمی توانیم مقادیر آنها را تغییر دهیم: با این حال، می توانیم مقادیر آنها را بخوانیم:
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Constants.HELLO_WORLD_STR);
}
}
نتیجه:
Hello, World!
public class ConstantsDemo {
public static void main(String[] args) {
double r = 10;
String message = String.format("Площадь круга с радиусом %f=%f", r, getCircleSquare(r));
System.out.println(message);
}
static double getCircleSquare(double r) {
return Constants.PI * r * r;
}
}
نتیجه:
Площадь круга с радиусом 10,000000=314,159265
آیا باید از متغیرهای سراسری استفاده کرد؟
مقالات زیادی در اینترنت وجود دارد که پیام اصلی آنها این است: متغیرهای جهانی شیطانی، بد و وحشتناک هستند. آیا واقعا؟ بیایید سعی کنیم جوانب مثبت و منفی متغیرهای جهانی را ارائه دهیم تا هرکس بتواند نتیجه گیری خود را بگیرد. بیایید با معایب شروع کنیم. بیایید برنامه ای را تصور کنیم که دارای یک کلاس با متغیرهای سراسری است که قابل خواندن و ویرایش است. با گذشت زمان، تعداد کلاسهای پروژه، تعداد متغیرهای سراسری و روشهایی که از متغیرهای سراسری یا به عبارتی وابسته به آنها استفاده میکنند، افزایش مییابد. با گذشت زمان، هر متغیر سراسری در قسمت های مختلف سیستم برای اهداف مختلف خوانده می شود. مقدار یک متغیر را می توان در قسمت های مختلف سیستم به روز کرد. تصویر کلی از دنیای این برنامه به طور قابل توجهی پیچیده تر می شود و این منجر به معایب زیر می شود :- کاهش خوانایی و افزایش مشکل در درک کد.
- افزایش پیچیدگی نگهداری کد
- برای تغییر یک متغیر سراسری، لازم است کل کد را آنالیز کنید تا متغیر را روی مقداری تنظیم نکنید که برای سایر قسمتهای سیستم نامعتبر است.
- افزایش خطاهایی که اشکال زدایی آنها بسیار دشوار است.
بیایید یک متغیر سراسری، آرایه ای از اشیا را تصور کنیم. به عنوان مثال، در یک قسمت از سیستم، رشته ها در این آرایه مورد انتظار است و در قسمت دیگری از سیستم، شخصی تصمیم گرفت از اعداد ممیز شناور استفاده کند. بعید است که کسی بخواهد این را بفهمد.
- اگر از متغیرهای سراسری در کد خود و همچنین برخی از کتابخانه ها که به نوبه خود از متغیرهای سراسری نیز استفاده می کنند، استفاده کنید، ممکن است نام متغیرها یکسان باشد. این می تواند منجر به خطا در سمت برنامه شما و در سمت کتابخانه ای شود که استفاده می کنید.
- اتصال بین بخش های مختلف سیستم که از متغیرهای سراسری استفاده می کنند را افزایش می دهد. برعکس، شما باید برای اتصال آزاد کد تلاش کنید. بهتر است بسیاری از زیرسیستمهای کوچک به طور آزاد به یکدیگر متصل باشند تا یک چیز سنگین. زیرا مقابله با چندین چیز ساده برای مغز آسانتر از یک چیز بسیار پیچیده و گیج کننده است.
- نوشتن آزمونهای واحد دشوارتر میشود، زیرا آزمون نمیداند به کدام متغیرهای سراسری نیاز است و چگونه باید مقداردهی اولیه شوند.
- در برنامه های چند رشته ای، استفاده از متغیرهای سراسری توسط رشته های مختلف منجر به افزایش خطاهایی می شود که اشکال زدایی آنها دشوار است و پیچیدگی پروژه را افزایش می دهد. به همین دلیل، لازم است دسترسی به چنین متغیرهایی را به درستی پیکربندی کنید و آنها را با همگام سازی و قفل تجهیز کنید. این ممکن است در آینده منجر به اتصال کوتاه شود. به عنوان مثال، رشته A متغیر X را برای کار خود قفل کرده است، و رشته B متغیر Y را برای کار خود قفل کرده است، و رشته A اکنون به متغیر Y نیاز دارد، و رشته B به متغیر X نیاز دارد. در نتیجه، برنامه مسدود می شود.
- در پروژه های کوچک، متغیرهای سراسری ساده ترین چیز برای انجام پروژه هستند.
- گاهی اوقات ترس از استفاده از متغیرهای سراسری منجر به پیچیدگی بیشتر پروژه می شود. سپس برنامه نویسان شروع به ایجاد تک تک و متوسل شدن به الگوهای طراحی دیگر می کنند.
- در برنامه نویسی، اغلب باید به برخی از مقادیر تغییرناپذیر تکیه کنید.
معقول ترین چیز این است که چنین مقادیری را به عنوان یک ثابت بنویسیم، زیرا فقط ثابت ها تضمین می کنند که مقدار یک متغیر در طول زمان تغییر نمی کند. چنین ثابت هایی را می توان همیشه یافت ( ،،،
Integer.MAX_VALUE
و غیره ). اما برنامه نویسی به استفاده از کتابخانه های استاندارد محدود نمی شود. اغلب اتفاق می افتد که شما نیاز به نوشتن نوعی منطق منحصر به فرد دارید، که نیاز به تکیه بر ثابت های منحصر به فرد خود دارد. به همین دلیل است که گاهی اوقات استفاده از ثابت ها (متغیرهای سراسری فقط خواندنی) واقعا زندگی را آسان می کند.Integer.MIN_VALUE
Boolean.TRUE
Collections.EMPTY_LIST
- هر چیزی که یک توسعه دهنده تازه کار می نویسد اساسا یک پروژه کوچک است. و استفاده از متغیرهای جهانی در پروژه های خود به او یاد می دهد که از متغیرهای جهانی در همه جا استفاده کند.
- بهتر است ابتدا یاد بگیرید که بدون "ترفندهای ممنوعه" انجام دهید. و با تجربه، درک اینکه چه زمانی استفاده از چنین تکنیک هایی مناسب است، خود به خود به دست خواهد آمد.
GO TO FULL VERSION