Qlobal dəyişənləri necə yaratmaq olar
Qlobal dəyişənlər tətbiqin istənilən yerindən əldə edilə bilən dəyişənlərdir. Başqa sözlə, onların əhatə dairəsi bütün tətbiqdir. Java-da belə dəyişən yaratmaq üçün ictimai sinifdə ictimai statik dəyişən yaratmalısınız:public class Example {
public static int a;
public static int b;
public static String str;
}
a
, b
və - dəyişənləri str
qlobal hala gəldi. Biz onlara proqram daxilindəki digər siniflərdən birbaşa daxil ola bilərik:
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);
}
}
Metodunu işlədirsək main
, aşağıdakı çıxışı görəcəyik:
4
5
Global String variable value
Qlobal dəyişənləri 2 növə bölmək olar:
- redaktə edilə bilən dəyişənlər;
- yalnız oxuna bilən dəyişənlər.
final
dəyişəni təyin edərkən dəyişən yaratmalı və ona dəyər təyin etməlisiniz:
public class Constants {
public static final double PI = 3.1415926535897932384626433832795;
public static final String HELLO_WORLD_STR = "Hello, World!";
}
Java adlandırma konvensiyasına görə, bütün sabitlər sözləri alt xətt işarəsi ilə ayıraraq, böyük hərflə adlandırılmalıdır. Beləliklə, biz sabitlər yaratdıq və indi onların dəyərlərini dəyişdirə bilməyəcəyik: Bununla belə, onların dəyərlərini oxuya bilərik:
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Constants.HELLO_WORLD_STR);
}
}
Nəticə:
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;
}
}
Nəticə:
Площадь круга с радиусом 10,000000=314,159265
Qlobal dəyişənlərdən istifadə etməlisiniz?
İnternetdə çoxlu məqalələr var, onların əsas mesajı budur: qlobal dəyişənlər pis, pis və dəhşətlidir. Doğrudanmı? Gəlin qlobal dəyişənlərin müsbət və mənfi cəhətlərini verməyə çalışaq ki, hər kəs öz nəticəsinə gələ bilsin. Mənfi cəhətlərdən başlayaq. Oxumaq və redaktə etmək mümkün olan qlobal dəyişənləri olan bir sinifə malik olan bir tətbiqi təsəvvür edək. Zaman keçdikcə layihədə siniflərin sayı, qlobal dəyişənlərdən istifadə edən və ya başqa sözlə onlardan asılı olan qlobal dəyişənlərin və metodların sayı artır. Zamanla hər bir qlobal dəyişən sistemin müxtəlif hissələrində müxtəlif məqsədlər üçün oxunur. Bir dəyişənin dəyəri sistemin müxtəlif hissələrində yenilənə bilər. Bu tətbiqin dünyasının ümumi mənzərəsi xeyli mürəkkəbləşir və bu, aşağıdakı çatışmazlıqlara gətirib çıxarır :- Azaldılmış oxunaqlılıq və kodu anlamaqda artan çətinlik.
- Kod baxımının artan mürəkkəbliyi.
- Bir qlobal dəyişəni dəyişdirmək üçün dəyişəni sistemin digər hissələri üçün etibarsız olan qiymətə təyin etməmək üçün bütün kodu təhlil etmək lazımdır.
- Sazlanması çox çətin olan səhvlərin artması.
Qlobal dəyişəni, obyektlər massivini təsəvvür edək. Sistemin bir hissəsində, məsələn, bu massivdə sətirlər gözlənilir, sistemin başqa bir hissəsində isə kimsə üzən nöqtəli nömrələrdən istifadə etmək qərarına gəlib. Çətin ki, kimsə bunu anlamaq istəsin.
- Əgər kodunuzda qlobal dəyişənlərdən, eləcə də öz növbəsində qlobal dəyişənlərdən də istifadə edən bəzi kitabxanalardan istifadə etsəniz, dəyişən adları eyni ola bilər. Bu, həm tətbiqinizin tərəfində, həm də istifadə etdiyiniz kitabxananın tərəfində səhvlərə səbəb ola bilər.
- Qlobal dəyişənlərdən istifadə edən sistemin müxtəlif hissələri arasında əlaqəni artırır. Əksinə, kodun boş birləşməsinə çalışmalısınız. Bir böyük şeyə sahib olmaqdansa, bir çox kiçik alt sistemlərin bir-birinə sərbəst şəkildə bağlanması daha yaxşıdır. Çünki beynin bir neçə sadə işin öhdəsindən gəlməsi, çox mürəkkəb və çaşdırıcı bir şeydən daha asandır.
- Vahid testlərinin yazılması çətinləşir, çünki test hansı qlobal dəyişənlərə ehtiyac olduğunu və onların necə işə salınması lazım olduğunu bilmir.
- Çox yivli proqramlarda qlobal dəyişənlərin müxtəlif başlıqlar tərəfindən istifadəsi sazlanması çətin olan səhvlərin artmasına və layihənin mürəkkəbliyinin artmasına səbəb olur. Buna görə də, bu cür dəyişənlərə girişi daha düzgün konfiqurasiya etmək, onları sinxronizasiya və kilidlərlə təchiz etmək lazımdır. Bu, gələcəkdə qısaqapanmalara səbəb ola bilər. Məsələn, A mövzusu öz işi üçün X dəyişənini, B mövzusu isə Y dəyişənini öz işi üçün kilidləyib və A ipi indi Y dəyişəninə, B mövzusu isə X dəyişəninə ehtiyac duyur. Nəticədə proqram dayanacaq.
- Kiçik layihələrdə qlobal dəyişənlər layihənin işləməsi üçün ən sadə şeydir.
- Bəzən qlobal dəyişənlərdən istifadə qorxusu layihənin daha da mürəkkəbləşməsinə səbəb olur. Sonra proqramçılar singleton yaratmağa və digər dizayn nümunələrinə müraciət etməyə başlayırlar.
- Proqramlaşdırmada siz tez-tez bəzi dəyişməz dəyərlərə etibar etməlisiniz.
Ən ağlabatan şey, belə dəyərləri sabit kimi yazmaqdır, çünki yalnız sabitlər dəyişənin dəyərinin zamanla dəyişməyəcəyinə zəmanət verir. Belə sabitləri hər zaman tapmaq olar (
Integer.MAX_VALUE
,Integer.MIN_VALUE
,Boolean.TRUE
,Collections.EMPTY_LIST
və s.). Lakin proqramlaşdırma standart kitabxanalardan istifadə etməklə məhdudlaşmır. Tez-tez olur ki, bir növ unikal məntiq yazmalısınız, bunun üçün öz unikal sabitlərinizə etibar etməlisiniz. Buna görə də bəzən sabitlərdən (yalnız oxunan qlobal dəyişənlərdən) istifadə həqiqətən həyatı asanlaşdırır.
- Təcrübəsiz bir tərtibatçının yazdığı hər şey əslində kiçik bir layihədir. Layihələrində qlobal dəyişənlərdən istifadə etmək ona hər yerdə qlobal dəyişənlərdən istifadə etməyi öyrədəcək.
- Əvvəlcə "qadağan olunmuş tövsiyələr" olmadan etməyi öyrənmək daha yaxşıdır. Təcrübə ilə, bu cür üsulların nə vaxt istifadə edilməsinin məqsədəuyğun olduğunu başa düşmək öz-özünə gələcəkdir.
GO TO FULL VERSION