Глобалдык өзгөрмөлөрдү кантип түзүү керек
Глобалдык өзгөрмөлөр - бул колдонмонун каалаган жеринен жетк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 атоо конвенциясына ылайык, бардык константалар астын сызык белгиси менен сөздөрдү бөлүп, баш тамга менен аталышы керек. Ошентип, биз константаларды түздүк, эми алардын баалуулуктарын өзгөртө албайбыз: Бирок, биз алардын баалуулуктарын окуй алабыз:
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
Сиз глобалдык өзгөрмөлөрдү колдонушуңуз керекпи?
Интернетте көптөгөн макалалар бар, алардын негизги кабары бул: глобалдык өзгөрмөлөр жаман, жаман жана коркунучтуу. Чын элеби? Келгиле, ар бир адам өз жыйынтыгын чыгарышы үчүн глобалдык өзгөрмөлөрдүн жакшы жана жаман жактарын берүүгө аракет кылалы. Келгиле, жаман жактарынан баштайлы. Окууга жана түзөтүүгө мүмкүн болгон глобалдык өзгөрмөлөрү бар классы бар тиркемени элестетип көрөлү. Убакыттын өтүшү менен долбоордогу класстардын саны, глобалдык өзгөрмөлөрдү колдонгон, же башкача айтканда аларга көз каранды болгон глобалдык өзгөрмөлөрдүн жана методдордун саны өсөт. Убакыттын өтүшү менен ар бир глобалдык өзгөрмө системанын ар кайсы бөлүктөрүндө ар кандай максаттар үчүн окулат. Өзгөрмөнүн мааниси системанын ар кандай бөлүктөрүндө жаңыртылышы мүмкүн. Бул колдонмонун дүйнөсүнүн жалпы сүрөтү кыйла татаалдашып, бул төмөнкү кемчorктерге алып келет :- Окуу мүмкүнчүлүгү кыскарды жана codeду түшүнүү кыйындады.
- Кодду тейлөөнүн татаалдыгы жогорулады.
- Бир глобалдык өзгөрмөнү өзгөртүү үчүн, өзгөрмө системанын башка бөлүктөрүндө жараксыз мааниге коюлбашы үчүн, бүт codeду талдоо керек.
- Мүчүлүштүктөрдү оңдоо өтө кыйын болгон каталардын көбөйүшү.
Келгиле, глобалдык өзгөрмөлөрдү, an objectтердин массивдерин элестетели. Системанын бир бөлүгүндө, мисалы, бул массивде саптар күтүлөт, ал эми системанын башка бөлүгүндө кимдир бирөө калкыма чекиттерди колдонууну чечти. Муну кимдир бирөө түшүнгүсү келбеши күмөн.
- Кодуңузда глобалдык өзгөрмөлөрдү, ошондой эле өз кезегинде глобалдык өзгөрмөлөрдү колдонгон кээ бир китепканаларды колдонсоңуз, өзгөрмө аттары бирдей болушу мүмкүн. Бул колдонмоңуздун тарабында да, сиз колдонуп жаткан китепкананын тарабында да каталарга алып келиши мүмкүн.
- Глобалдык өзгөрмөлөрдү колдонгон системанын ар кандай бөлүктөрүнүн ортосундагы байланышты жогорулатат. Тескерисинче, сиз codeду эркин бириктирүүгө аракет кылышыңыз керек. Бир чоң нерсеге ээ болгонго караганда, көптөгөн майда подсистемалардын бири-бирине эркин туташканы жакшы. Анткени мээге бир өтө татаал жана башаламан нерсеге караганда бир нече жөнөкөй нерселер менен күрөшүү оңой.
- Бирдик тесттерин жазуу кыйындайт, анткени тест кайсы глобалдык өзгөрмөлөр керек экенин жана аларды кантип инициализациялоо керектигин билбейт.
- Көп агымдуу тиркемелерде, глобалдык өзгөрмөлөрдү түрдүү жиптер менен колдонуу мүчүлүштүктөрдү оңдоо кыйын болгон каталардын көбөйүшүнө жана долбоордун татаалдыгынын өсүшүнө алып келет. Ушундан улам, мындай өзгөрмөлөргө кирүү мүмкүнчүлүгүн туурараак конфигурациялоо, аларды синхрондоштуруу жана кулпулар менен жабдуу зарыл. Бул келечекте кыска туташууларга алып келиши мүмкүн. Мисалы, A жип өзүнүн иши үчүн X өзгөрмөсүн, ал эми В сапы Y өзгөрмөсүн анын иши үчүн кулпулап койду, ал эми А жипке эми Y өзгөрмөсүн, ал эми В жипине X өзгөрмөсүн талап кылат. Натыйжада, программа катып калат.
- Чакан долбоорлордо глобалдык өзгөрмөлөр долбоордун иштеши үчүн эң жөнөкөй нерсе.
- Кээде глобалдык өзгөрмөлөрдү колдонуудан коркуу долбоордун дагы татаалдыгына алып келет. Андан кийин программисттер синглтондорду түзүп, башка дизайн үлгүлөрүнө кайрыла башташат.
- Программалоодо сиз көбүнчө кээ бир өзгөрүлгүс баалуулуктарга таянышыңыз керек.
Эң акылга сыярлык нерсе - мындай маанилерди туруктуу деп жазуу, анткени өзгөрмөнүн мааниси убакыттын өтүшү менен өзгөрбөй тургандыгына туруктуулар гана кепилдик берет. Мындай константаларды дайыма табууга болот (
Integer.MAX_VALUE
,Integer.MIN_VALUE
,Boolean.TRUE
,Collections.EMPTY_LIST
ж.б.). Бирок программалоо стандарттык китепканаларды колдонуу менен эле чектелбейт. Көбүнчө уникалдуу логиканы жазуу керек болуп калат, ал үчүн өзүңүздүн уникалдуу константаларыңызга таянышыңыз керек. Ошондуктан кээде константаларды (окуу үчүн гана глобалдык өзгөрмөлөрдү) колдонуу чындап эле жашоону жеңилдетет.
- Жаңы баштаган иштеп чыгуучунун жазгандарынын баары негизинен кичинекей долбоор. Жана анын долбоорлорунда глобалдык өзгөрмөлөрдү колдонуу аны бардык жерде глобалдык өзгөрмөлөрдү колдонууга үйрөтөт.
- Адегенде “тыюу салынган амалдар” жок кылганды үйрөнүп алганыңыз оң. Тажрыйба менен, мындай ыкмаларды качан колдонуу туура экенин түшүнүү өзүнөн-өзү пайда болот.
GO TO FULL VERSION