JavaRush /Java блогу /Random-KY /Javaдагы глобалдык өзгөрмөлөр: аларды качан колдонуу кере...
Анзор Кармов
Деңгээл
Санкт-Петербург

Javaдагы глобалдык өзгөрмөлөр: аларды качан колдонуу керек?

Группада жарыяланган
Салам! Бул макалада биз глобалдык өзгөрмөлөр, алардын декларациясы жана туура колдонуунун мисалдары жөнүндө сүйлөшөбүз. Кичинекей эскертүү: биз глобалдык класс өзгөрмөлөрүн, башкача айтканда, кайсы бир класстын ичинде кирүүгө мүмкүн болгон өзгөрмөлөрдү карабайбыз. Биз бүткүл тиркеменин глобалдык өзгөрмөлөрү жөнүндө сүйлөшөбүз - бүт тиркеменин ичинде жеткorктүү болгондор. Javaдагы глобалдык өзгөрмөлөр: аларды качан колдонуу керек?  - 1

Глобалдык өзгөрмөлөрдү кантип түзүү керек

Глобалдык өзгөрмөлөр - бул колдонмонун каалаган жеринен жеткorктүү болгон өзгөрмөлөр. Башка сөз менен айтканда, алардын чөйрөсү толугу менен колдонуу болуп саналат. Javaда мындай өзгөрмө түзүү үчүн, сиз коомдук класста жалпы статикалык өзгөрмө түзүшүңүз керек:
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!";

}
Java атоо конвенциясына ылайык, бардык константалар астын сызык белгиси менен сөздөрдү бөлүп, баш тамга менен аталышы керек. Ошентип, биз константаларды түздүк, эми алардын баалуулуктарын өзгөртө албайбыз: Javaдагы глобалдык өзгөрмөлөр: аларды качан колдонуу керек?  - 2Бирок, биз алардын баалуулуктарын окуй алабыз:
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

Сиз глобалдык өзгөрмөлөрдү колдонушуңуз керекпи?

Интернетте көптөгөн макалалар бар, алардын негизги кабары бул: глобалдык өзгөрмөлөр жаман, жаман жана коркунучтуу. Чын элеби? Келгиле, ар бир адам өз жыйынтыгын чыгарышы үчүн глобалдык өзгөрмөлөрдүн жакшы жана жаман жактарын берүүгө аракет кылалы. Javaдагы глобалдык өзгөрмөлөр: аларды качан колдонуу керек?  - 3Келгиле, жаман жактарынан баштайлы. Окууга жана түзөтүүгө мүмкүн болгон глобалдык өзгөрмөлөрү бар классы бар тиркемени элестетип көрөлү. Убакыттын өтүшү менен долбоордогу класстардын саны, глобалдык өзгөрмөлөрдү колдонгон, же башкача айтканда аларга көз каранды болгон глобалдык өзгөрмөлөрдүн жана методдордун саны өсөт. Убакыттын өтүшү менен ар бир глобалдык өзгөрмө системанын ар кайсы бөлүктөрүндө ар кандай максаттар үчүн окулат. Өзгөрмөнүн мааниси системанын ар кандай бөлүктөрүндө жаңыртылышы мүмкүн. Бул колдонмонун дүйнөсүнүн жалпы сүрөтү кыйла татаалдашып, бул төмөнкү кемчorктерге алып келет :
  1. Окуу мүмкүнчүлүгү кыскарды жана codeду түшүнүү кыйындады.
  2. Кодду тейлөөнүн татаалдыгы жогорулады.
  3. Бир глобалдык өзгөрмөнү өзгөртүү үчүн, өзгөрмө системанын башка бөлүктөрүндө жараксыз мааниге коюлбашы үчүн, бүт codeду талдоо керек.
  4. Мүчүлүштүктөрдү оңдоо өтө кыйын болгон каталардын көбөйүшү.

    Келгиле, глобалдык өзгөрмөлөрдү, an objectтердин массивдерин элестетели. Системанын бир бөлүгүндө, мисалы, бул массивде саптар күтүлөт, ал эми системанын башка бөлүгүндө кимдир бирөө калкыма чекиттерди колдонууну чечти. Муну кимдир бирөө түшүнгүсү келбеши күмөн.

  5. Кодуңузда глобалдык өзгөрмөлөрдү, ошондой эле өз кезегинде глобалдык өзгөрмөлөрдү колдонгон кээ бир китепканаларды колдонсоңуз, өзгөрмө аттары бирдей болушу мүмкүн. Бул колдонмоңуздун тарабында да, сиз колдонуп жаткан китепкананын тарабында да каталарга алып келиши мүмкүн.
  6. Глобалдык өзгөрмөлөрдү колдонгон системанын ар кандай бөлүктөрүнүн ортосундагы байланышты жогорулатат. Тескерисинче, сиз codeду эркин бириктирүүгө аракет кылышыңыз керек. Бир чоң нерсеге ээ болгонго караганда, көптөгөн майда подсистемалардын бири-бирине эркин туташканы жакшы. Анткени мээге бир өтө татаал жана башаламан нерсеге караганда бир нече жөнөкөй нерселер менен күрөшүү оңой.
  7. Бирдик тесттерин жазуу кыйындайт, анткени тест кайсы глобалдык өзгөрмөлөр керек экенин жана аларды кантип инициализациялоо керектигин билбейт.
  8. Көп агымдуу тиркемелерде, глобалдык өзгөрмөлөрдү түрдүү жиптер менен колдонуу мүчүлүштүктөрдү оңдоо кыйын болгон каталардын көбөйүшүнө жана долбоордун татаалдыгынын өсүшүнө алып келет. Ушундан улам, мындай өзгөрмөлөргө кирүү мүмкүнчүлүгүн туурараак конфигурациялоо, аларды синхрондоштуруу жана кулпулар менен жабдуу зарыл. Бул келечекте кыска туташууларга алып келиши мүмкүн. Мисалы, A жип өзүнүн иши үчүн X өзгөрмөсүн, ал эми В сапы Y өзгөрмөсүн анын иши үчүн кулпулап койду, ал эми А жипке эми ​​Y өзгөрмөсүн, ал эми В жипине X өзгөрмөсүн талап кылат. Натыйжада, программа катып калат.
Бирок мунун баары туура эмес. Бул тобокелдиктердин сүрөттөлүшү, анын ыктымалдыгы долбоор өсүп, андагы глобалдык өзгөрмөлөрдүн саны көбөйгөн сайын көбөйөт. Келгиле, профессионалдарга өтөбүз :
  1. Чакан долбоорлордо глобалдык өзгөрмөлөр долбоордун иштеши үчүн эң жөнөкөй нерсе.
  2. Кээде глобалдык өзгөрмөлөрдү колдонуудан коркуу долбоордун дагы татаалдыгына алып келет. Андан кийин программисттер синглтондорду түзүп, башка дизайн үлгүлөрүнө кайрыла башташат.
  3. Программалоодо сиз көбүнчө кээ бир өзгөрүлгүс баалуулуктарга таянышыңыз керек.

    Эң акылга сыярлык нерсе - мындай маанилерди туруктуу деп жазуу, анткени өзгөрмөнүн мааниси убакыттын өтүшү менен өзгөрбөй тургандыгына туруктуулар гана кепилдик берет. Мындай константаларды дайыма табууга болот ( Integer.MAX_VALUE, Integer.MIN_VALUE, Boolean.TRUE, Collections.EMPTY_LISTж.б.). Бирок программалоо стандарттык китепканаларды колдонуу менен эле чектелбейт. Көбүнчө уникалдуу логиканы жазуу керек болуп калат, ал үчүн өзүңүздүн уникалдуу константаларыңызга таянышыңыз керек. Ошондуктан кээде константаларды (окуу үчүн гана глобалдык өзгөрмөлөрдү) колдонуу чындап эле жашоону жеңилдетет.

Жалпысынан алганда, сиз глобалдык өзгөрмөлөрдү ашыкча колдонбошуңуз керек; мүмкүн болсо, туруктууларды гана колдонуңуз. Чакан долбоорлордо глобалдык өзгөрмөлөрдү колдонуу жаман эмес деп мурда айтылган. Бирок үйрөнчүк иштеп чыгуучу аларды такыр колдонбогону жакшы. Эки себеп менен:
  1. Жаңы баштаган иштеп чыгуучунун жазгандарынын баары негизинен кичинекей долбоор. Жана анын долбоорлорунда глобалдык өзгөрмөлөрдү колдонуу аны бардык жерде глобалдык өзгөрмөлөрдү колдонууга үйрөтөт.
  2. Адегенде “тыюу салынган амалдар” жок кылганды үйрөнүп алганыңыз оң. Тажрыйба менен, мындай ыкмаларды качан колдонуу туура экенин түшүнүү өзүнөн-өзү пайда болот.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION