Global o'zgaruvchilarni qanday yaratish kerak
Global o'zgaruvchilar - bu dasturning istalgan joyidan kirish mumkin bo'lgan o'zgaruvchilar. Boshqacha qilib aytganda, ularning doirasi butun dasturdir. Java-da bunday o'zgaruvchini yaratish uchun siz umumiy sinfda umumiy statik o'zgaruvchini yaratishingiz kerak:public class Example {
public static int a;
public static int b;
public static String str;
}
a
, b
va - o'zgaruvchilari str
global bo'ldi. Biz ularga ilova ichidagi boshqa sinflardan to'g'ridan-to'g'ri kirishimiz mumkin:
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);
}
}
Agar biz usulni ishga tushirsak main
, biz quyidagi natijani ko'ramiz:
4
5
Global String variable value
Global o'zgaruvchilarni 2 turga bo'lish mumkin:
- tahrirlash mumkin bo'lgan o'zgaruvchilar;
- faqat o'qilishi mumkin bo'lgan o'zgaruvchilar.
final
va o'zgaruvchini belgilashda unga qiymat berishingiz kerak:
public class Constants {
public static final double PI = 3.1415926535897932384626433832795;
public static final String HELLO_WORLD_STR = "Hello, World!";
}
Java nomlash konventsiyasiga ko'ra, barcha konstantalar so'zlarni pastki chiziq belgisi bilan ajratib, bosh harf bilan nomlanishi kerak. Shunday qilib, biz doimiylarni yaratdik va endi biz ularning qiymatlarini o'zgartira olmaymiz: Biroq, biz ularning qiymatlarini o'qiymiz:
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Constants.HELLO_WORLD_STR);
}
}
Xulosa:
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;
}
}
Xulosa:
Площадь круга с радиусом 10,000000=314,159265
Global o'zgaruvchilardan foydalanish kerakmi?
Internetda ko'plab maqolalar mavjud, ularning asosiy xabari bu: global o'zgaruvchilar yovuz, yomon va dahshatli. Haqiqatan ham shundaymi? Keling, har kim o'z xulosasini chiqarishi uchun global o'zgaruvchilarning ijobiy va salbiy tomonlarini berishga harakat qilaylik. Keling, kamchiliklardan boshlaylik. Keling, o'qilishi va tahrirlanishi mumkin bo'lgan global o'zgaruvchilarga ega sinfga ega bo'lgan ilovani tasavvur qilaylik. Vaqt o'tishi bilan loyihadagi sinflar soni, global o'zgaruvchilardan foydalanadigan yoki boshqacha aytganda, ularga bog'liq bo'lgan global o'zgaruvchilar va usullar soni ortib boradi. Vaqt o'tishi bilan har bir global o'zgaruvchi tizimning turli qismlarida turli maqsadlarda o'qiladi. O'zgaruvchining qiymati tizimning turli qismlarida yangilanishi mumkin. Ushbu ilova dunyosining umumiy tasviri sezilarli darajada murakkablashadi va bu quyidagi kamchiliklarga olib keladi :- O'qish qobiliyati pasaygan va kodni tushunishda qiyinchilik kuchaygan.
- Kodni saqlashning murakkabligi ortdi.
- Bitta global o'zgaruvchini o'zgartirish uchun o'zgaruvchini tizimning boshqa qismlari uchun yaroqsiz qiymatga o'rnatmaslik uchun butun kodni tahlil qilish kerak.
- Nosozliklarni tuzatish juda qiyin bo'lgan xatolarning ko'payishi.
Global o'zgaruvchini, ob'ektlar massivini tasavvur qilaylik. Tizimning bir qismida, masalan, ushbu massivda satrlar kutiladi va tizimning boshqa qismida kimdir suzuvchi nuqta raqamlaridan foydalanishga qaror qildi. Buni hech kim tushunishni xohlamasligi dargumon.
- Agar siz kodingizda global o'zgaruvchilardan, shuningdek, o'z navbatida global o'zgaruvchilardan foydalanadigan ba'zi kutubxonalardan foydalansangiz, o'zgaruvchilar nomlari bir xil bo'lishi mumkin. Bu ilovangiz tomonida ham, foydalanayotgan kutubxonangiz tomonida ham xatolarga olib kelishi mumkin.
- Global o'zgaruvchilardan foydalanadigan tizimning turli qismlari o'rtasidagi ulanishni oshiradi. Aksincha, siz kodni bo'shashmasdan ulashga harakat qilishingiz kerak. Bitta katta narsaga ega bo'lishdan ko'ra, bir-biri bilan erkin bog'langan ko'plab kichik quyi tizimlarga ega bo'lish yaxshiroqdir. Chunki miyaga bir nechta oddiy narsalar bilan shug‘ullanish, o‘ta murakkab va chalkash narsa bilan shug‘ullanishdan ko‘ra osonroqdir.
- Birlik testlarini yozish qiyinlashadi, chunki test qaysi global o'zgaruvchilar kerakligini va ularni qanday boshlash kerakligini bilmaydi.
- Ko'p oqimli ilovalarda global o'zgaruvchilardan turli oqimlar tomonidan foydalanish disk raskadrovka qiyin bo'lgan xatolarning ko'payishiga va loyihaning murakkabligini oshirishga olib keladi. Shu sababli, bunday o'zgaruvchilarga kirishni to'g'ri sozlash, ularni sinxronizatsiya va qulflar bilan jihozlash kerak. Bu kelajakda qisqa tutashuvlarga olib kelishi mumkin. Misol uchun, A ipi o'z ishi uchun X o'zgaruvchisini blokladi va B o'zgaruvchisi o'z ishi uchun Y o'zgaruvchisini blokladi va A ipiga endi Y o'zgaruvchisi va B o'zgaruvchisi X o'zgaruvchisi kerak. Natijada, dastur muzlab qoladi.
- Kichik loyihalarda global o'zgaruvchilar loyihaning ishlashi uchun eng oddiy narsadir.
- Ba'zida global o'zgaruvchilardan foydalanish qo'rquvi loyihani yanada murakkablashtirishga olib keladi. Keyin dasturchilar singletonlarni yaratishni va boshqa dizayn naqshlariga murojaat qilishni boshlaydilar.
- Dasturlashda siz ko'pincha ba'zi o'zgarmas qiymatlarga tayanishingiz kerak.
Eng oqilona narsa, bunday qiymatlarni doimiy sifatida yozishdir, chunki faqat konstantalar vaqt o'tishi bilan o'zgaruvchining qiymati o'zgarmasligini kafolatlaydi. Bunday konstantalarni har doim topish mumkin (
Integer.MAX_VALUE
,Integer.MIN_VALUE
,Boolean.TRUE
,Collections.EMPTY_LIST
va hokazo). Lekin dasturlash faqat standart kutubxonalardan foydalanish bilan cheklanmaydi. Ko'pincha siz o'zingizning noyob doimiylaringizga tayanishingiz kerak bo'lgan noyob mantiqni yozishingiz kerak bo'ladi. Shuning uchun ba'zan konstantalardan foydalanish (faqat o'qish uchun global o'zgaruvchilar) haqiqatan ham hayotni osonlashtiradi.
- Ajam ishlab chiquvchi yozgan hamma narsa aslida kichik loyihadir. Va uning loyihalarida global o'zgaruvchilardan foydalanish uni hamma joyda global o'zgaruvchilardan foydalanishni o'rgatadi.
- Avvaliga "taqiqlangan fokuslarsiz" qilishni o'rganish yaxshiroqdir. Va tajriba bilan, bunday usullarni qachon qo'llash maqsadga muvofiqligini tushunish o'z-o'zidan paydo bo'ladi.
GO TO FULL VERSION