JavaRush /Java Blog /Random-TK /Java-da global üýtgeýjiler: Olary haçan ulanmaly?
Анзор Кармов
Dereje
Санкт-Петербург

Java-da global üýtgeýjiler: Olary haçan ulanmaly?

Toparda çap edildi
Salam! Bu makalada global üýtgeýänler, olaryň beýannamasy we degişli ulanylyş mysallary barada söhbet ederis. Kiçijik bellik: global synp üýtgeýjilerini, ýagny islendik synpyň içinde girip boljaklary göz öňünde tutmarys. Applicationhli programmanyň global üýtgeýjileri - tutuş programmanyň içinde girip boljak zatlar hakda gürleşeris. Java-da global üýtgeýjiler: Olary haçan ulanmaly?  - 1

Global üýtgeýjileri nädip döretmeli

Global üýtgeýjiler programmanyň islendik ýerinden girip bolýan üýtgeýjilerdir. Başgaça aýdylanda, olaryň gerimi tutuş programma. Java-da şeýle üýtgeýjini döretmek üçin jemgyýetçilik synpynda umumy statiki üýtgeýjini döretmeli:
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
Üýtgeýjiler awe b- strglobal boldy. Programmanyň içindäki beýleki synplardan gönüden-göni girip bileris:
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);
    }
}
Usuly işletsek main, aşakdaky çykyşy göreris:

4
5
Global String variable value
Global üýtgeýjileri 2 görnüşe bölmek bolar:
  • redaktirläp boljak üýtgeýjiler;
  • diňe okap bolýan üýtgeýjiler.
Ikinjisine global yzygiderlilik diýilýär. Global üýtgewsiz döretmek üçin üýtgeýji düzmeli finalwe üýtgeýjini kesgitläniňde oňa baha bellemeli:
public class Constants {

    public static final double PI = 3.1415926535897932384626433832795;
    public static final String HELLO_WORLD_STR = "Hello, World!";

}
Java atlandyryş konwensiýasyna laýyklykda, sözleriň aşaky harp bilen bölünip, baş harplar bilen ýazylmalydyr. Şeýlelik bilen, yzygiderlilik döretdik, indi olaryň gymmatlyklaryny üýtgedip bilmeris: Java-da global üýtgeýjiler: Olary haçan ulanmaly?  - 2Şeýle-de bolsa, olaryň gymmatlyklaryny okap bileris:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
Netije:

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;
    }
}
Netije:

Площадь круга с радиусом 10,000000=314,159265

Global üýtgeýänleri ulanmalymy?

Internetde köp makalalar bar, olaryň esasy habary: global üýtgeýänler erbet, erbet we aýylganç. Bu hakykatdanam? Her kim öz netijesini çykaryp biler ýaly, global üýtgeýänleriň oňaýly taraplaryny bermäge synanyşalyň. Java-da global üýtgeýjiler: Olary haçan ulanmaly?  - 3Zerur taraplaryndan başlalyň. Okalýan we redaktirläp boljak global üýtgeýänler bilen synpy bolan bir programmany göz öňüne getireliň. Wagtyň geçmegi bilen taslamadaky synplaryň sany, global üýtgeýänleri ýa-da başgaça aýdylanda, olara bagly bolan global üýtgeýänleriň we usullaryň sany artýar. Wagtyň geçmegi bilen her global üýtgeýji ulgamyň dürli böleklerinde dürli maksat bilen okalýar. Üýtgeýjiniň bahasy ulgamyň dürli ýerlerinde täzelenip bilner. Bu programma dünýäsiniň umumy keşbi has çylşyrymlaşýar we bu aşakdaky kemçiliklere sebäp bolýar :
  1. Okalmagy peseldi we koda düşünmekde kynçylyk artdy.
  2. Kod saklamagyň çylşyrymlylygynyň ýokarlanmagy.
  3. Bir global üýtgeýjini üýtgetmek üçin üýtgeýjini ulgamyň beýleki bölekleri üçin nädogry baha goýmazlyk üçin tutuş kody seljermeli.
  4. Düzeltmek gaty kyn ýalňyşlaryň köpelmegi.

    Geliň, global üýtgeýjini, obýektleriň toplumyny göz öňüne getireliň. Mysal üçin ulgamyň bir böleginde setirlere garaşylýar, ulgamyň başga bir böleginde bolsa ýüzýän nokatlaryň belgilerini ulanmak kararyna geldi. Her kimiň muňa düşünmek islemegi gaty ähtimal.

  5. Kodyňyzdaky global üýtgeýjileri, öz gezeginde global üýtgeýänleri ulanýan käbir kitaphanalary ulanýan bolsaňyz, üýtgeýän atlar birmeňzeş bolup biler. Bu, programmaňyzyň ýa-da ulanýan kitaphananyňyzyň tarapynda ýalňyşlyklara sebäp bolup biler.
  6. Global üýtgeýänleri ulanýan ulgamyň dürli bölekleriniň arasyndaky baglanyşygy ýokarlandyrýar. Munuň tersine, koduň boş birikdirilmegine çalyşmaly. Bir uly zat däl-de, köp kiçi kiçi ulgamlaryň biri-birine arkaýyn birikdirilmegi has gowudyr. Sebäbi beýni üçin gaty çylşyrymly we bulaşyk bir zat däl-de, birnäçe ýönekeý zatlar bilen iş salyşmak has aňsat.
  7. Bölüm synaglaryny ýazmak has kynlaşýar, sebäbi synag haýsy global üýtgeýänleriň zerurdygyny we nädip başlamalydygyny bilenok.
  8. Köp okalýan programmalarda global üýtgeýänleri dürli sapaklar bilen ulanmak, düzetmek kyn bolan ýalňyşlyklaryň köpelmegine we taslama çylşyrymlylygynyň ýokarlanmagyna getirýär. Şol sebäpli şeýle üýtgeýjilere girişi has dogry sazlamak, sinhronizasiýa we gulplar bilen enjamlaşdyrmak zerur. Bu geljekde gysga utgaşmalara sebäp bolup biler. Mysal üçin, A sapak işi üçin X üýtgeýjini gulplady, B sapagy bolsa Y üýtgeýjisini gulplady, A sapagy indi Y üýtgeýjä, B sapak bolsa X üýtgeýjä mätäç. Netijede programma doňup galar.
Emma bularyň hemmesi nädogry. Bu, töwekgelçilikleriň beýany, taslama ulaldygyça we ondaky global üýtgeýänleriň sany köpelýär. Gowy taraplaryna geçeliň :
  1. Kiçi taslamalarda global üýtgeýjiler taslamanyň işlemegi üçin iň ýönekeý zat.
  2. Käwagt global üýtgeýänleri ulanmak gorkusy taslamada has çylşyrymlylyga sebäp bolýar. Soňra programmistler ýeketäk aýdymlary döredip, beýleki dizaýn nagyşlaryna ýüz tutup başlaýarlar.
  3. Programmirlemekde köplenç käbir üýtgewsiz gymmatlyklara bil baglamaly.

    Iň amatly zat, hemişelik ýaly bahalary ýazmakdyr, sebäbi üýtgeýjiniň bahasynyň wagtyň geçmegi bilen üýtgemezligini diňe yzygiderlilik kepillendirýär. Şeýle yzygiderliligi hemişe tapyp bolýar ( ,, Integer.MAX_VALUEwe ş.m. ). Emma programmirlemek adaty kitaphanalary ulanmak bilen çäklenmeýär. Köplenç özboluşly yzygiderliligiňize bil baglamaly özboluşly logika ýazmaly bolarsyňyz. Şonuň üçin käwagt yzygiderli (diňe okalýan global üýtgeýänler) ulanmak durmuşy aňsatlaşdyrýar.Integer.MIN_VALUEBoolean.TRUECollections.EMPTY_LIST

Umuman aýdanyňda, global üýtgeýänleri aşa ulanmaly dälsiňiz, mümkin bolsa diňe yzygiderli ulanyň. Kiçijik taslamalarda global üýtgeýänleri ulanmak erbet däl diýilýärdi. Aöne täze bir işläp düzüjiniň olary asla ulanmazlygy has gowudyr. Iki sebäbe görä:
  1. Täzelik döredijiniň ýazan zatlarynyň hemmesi aslynda kiçi taslama. Taslamalarynda global üýtgeýjileri ulanmak oňa global üýtgeýänleri hemme ýerde ulanmagy öwreder.
  2. Ilki bilen “gadagan hileler” etmezden öwrenmek has gowudyr. Tejribe bilen, şeýle usullary haçan ulanmalydygyna düşünmek özbaşdak ýüze çykar.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION