JavaRush /Java blogi /Random-UZ /Java-dagi global o'zgaruvchilar: ularni qachon ishlatish ...
Анзор Кармов
Daraja
Санкт-Петербург

Java-dagi global o'zgaruvchilar: ularni qachon ishlatish kerak?

Guruhda nashr etilgan
Salom! Ushbu maqolada biz global o'zgaruvchilar, ularning deklaratsiyasi va to'g'ri foydalanish misollari haqida gapiramiz. Kichik bir eslatma: biz global sinf o'zgaruvchilarini, ya'ni biron bir sinf ichida kirish mumkin bo'lganlarni ko'rib chiqmaymiz. Biz butun dasturning global o'zgaruvchilari haqida gaplashamiz - butun ilova ichida kirish mumkin bo'lganlar. Java-dagi global o'zgaruvchilar: ularni qachon ishlatish kerak?  - 1

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, bva - o'zgaruvchilari strglobal 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.
Ikkinchisi global konstantalar deb ataladi. Global doimiyni yaratish uchun siz o'zgaruvchini yaratishingiz finalva 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: Java-dagi global o'zgaruvchilar: ularni qachon ishlatish kerak?  - 2Biroq, 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. Java-dagi global o'zgaruvchilar: ularni qachon ishlatish kerak?  - 3Keling, 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 :
  1. O'qish qobiliyati pasaygan va kodni tushunishda qiyinchilik kuchaygan.
  2. Kodni saqlashning murakkabligi ortdi.
  3. Bitta global o'zgaruvchini o'zgartirish uchun o'zgaruvchini tizimning boshqa qismlari uchun yaroqsiz qiymatga o'rnatmaslik uchun butun kodni tahlil qilish kerak.
  4. 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.

  5. 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.
  6. 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.
  7. Birlik testlarini yozish qiyinlashadi, chunki test qaysi global o'zgaruvchilar kerakligini va ularni qanday boshlash kerakligini bilmaydi.
  8. 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.
Ammo bularning barchasi noto'g'ri. Bu xavflarning tavsifi bo'lib, loyiha o'sishi va undagi global o'zgaruvchilar soni ortib borishi ehtimoli ortadi. Keling, ijobiy tomonlarga o'tamiz :
  1. Kichik loyihalarda global o'zgaruvchilar loyihaning ishlashi uchun eng oddiy narsadir.
  2. Ba'zida global o'zgaruvchilardan foydalanish qo'rquvi loyihani yanada murakkablashtirishga olib keladi. Keyin dasturchilar singletonlarni yaratishni va boshqa dizayn naqshlariga murojaat qilishni boshlaydilar.
  3. 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_LISTva 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.

Umuman olganda, siz global o'zgaruvchilardan ortiqcha foydalanmasligingiz kerak; iloji bo'lsa, faqat konstantalardan foydalaning. Ilgari kichik loyihalarda global o'zgaruvchilardan foydalanish yomon emasligi aytilgan edi. Ammo yangi boshlanuvchilar uchun ularni umuman ishlatmaslik yaxshiroqdir. Ikki sababga ko'ra:
  1. 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.
  2. 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.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION