15.
Məntiqi operatorlar
JavaScriptdə 3 məntiqi operator var: || (VƏYA), && (VƏ),! (DEYİL). Məntiqi
operatorlar olmağına baxmıyaraq sadəcə boolean tipidə deyil, müxtəlif
tiplərdə də istifadə etmək mümkündür. Onlar nəticələridə fərqlidir.
İzahlara keçək
|| (VƏYA)
“VƏYA” operatoru- iki düz xətt ilə işarə olunur:
netice = a || b;
Klassik proqramlaşdırmada məntiqi OR sadəcə boolean dəyərini istifadə
etmək üçün isitfadə edilirdi. Arqumentlərdən düzgün olanını true olaraq.
Əks halda isə false dəyərini döndərəcəkdir. Javascriptdə bu operatordan çox
istifadə edilir. Əvvəlcə boolean tipində necə nəticə verdiyinə baxaq.
Dört məntiqi kombinasiya vardır:
alert (true || true); // true
alert (false || true); // true
alert (true || false); // true
93
alert (false || false); // false
Gördüyünüz kimi hər ikisidə false olandan başqa hər zaman true dəyərini
verir.
Əgər istifadə edilən boolean deyildirsə, nəticə əldə etmək üçün boolean
dəyərinə çevirəcəkdir.
Məsələn, 1 – true , 0- false dəyərini verir:
Çox zaman VƏYA || ilə verilənlərindən hansının düzgün olub olmamasını if
ifadəsində istifadə edilir.
Məsələn:
if (1 || 0) {// eyni ilə if kimi işləyir (true || false)
alert ('Düzgündür!');
}
let saat = 9;
if (saat <10 || saat> 18) {
alert ('Ofis bağlıdır.');
}
94
Daha çox şərt yaza bilərik;
VƏYA ilk düzgün dəyərini tapır
Yuxarıda izah edilən məntiq biraz klassikdir. İndi isə Javascriptin “əlavə”
xüsusiyyətlərini izah edək. Genişləndirilmiş alqoritma aşağıdakı kimi işləyir.
Birdən çox OR dəyəri verildikdə:
let saat = 12;
let hefteSonu = true;
if (saat <10 || saat> 18 || hefteSonu) {
alert ('Ofis bağlıdır.'); // Həftə Sonu
}
95
netice= deyer1 || deyer2 || deyer3;
VƏYA || operatoru aşağıdakıları yerinə yetirir:
• Dəyərlər solda sağa doğru yoxlanılır.
• Alınmış nəticə üçün boolean dəyərinə çeviri. Nəticə düzdürsə, çevrilmə
dayancaqdır və əsl dəyəri verəcəkdir.
• Bütün dəyərlər yanlışdırsa, son dəyəri verəcəkdir.
Dəyər çevrilməsi olmadıqda original halda geri döndürəcəkdir.
OR “||” ifadəsində true dəyəri olmadıqda ilk və ya son dəyəri verəcəkdir.
Nümunə:
Sadə, klassik, boolean VƏYA ilə müqayisə etdikdə maraqlı nəticələr əldə
etmiş olacıq.
alert (1 || 0); // 1 (1 Düzgündür)
alert (true || 'nə olursa olsun'); // (düzgündür)
alert (null || 1); // 1 (1, düzgündür)
alert (null || 0 || 1); // 1 (düzgündür)
alert (undefined || null || 0); // 0 (yanlışdır, son
dəyəri verəcədir)
96
İfadələrdəki düzgün dəyəri almaq
Məlumatın tərkibində null/undefined olan dəyişənlər ola bilər. Düzgün
dəyəri necə tapa bilərik?
OR || istifadə edə bilərik.
Həm currentUser həmdə defaultUser yanlışdırsa, “unnamed” nəticəsi
olacaqdır.
let indikiİstifadeci = null;
let ilkinİstifadəci = "Nail";
let name = indikiİstifadeci || ilkinİstifadəci || "adsiz";
alert (ad); // "Nail" -nu seçəcəkdir. İlkin düzgün dəyər olduğu üçün
97
2. Qısa yolla dəyər alma.
İsitfadə ediləcəklər dəyərlərlə bağlı deyil həmdə ifadələrə də bağlı ola bilər.
VƏYa bunları solda sağa dəyərini alıb və test edəcəkdir. Dəyər əgər true
olarsa, dayanacaqdır və nəticəni verəcəkdir. Buna “qısa dəyər alma” deyilir.
İkinci arqument olaraq verilən ifadənin dəyişən alması bəzi problemlərin
yaranmasına gətirib çıxarır.
Aşağıdakı nümunədə x-ə dəyər verilmir:
Bunun yerinə ilk arqument səhvdirsə , || ikincisini yoxlayacadır. Beləliklə
istədiyimiz nəticəni alırıq:
let x;
true || (x = 1);
alert (x); // undefined, çünki (x = 1) dəyər verilmədi
let x;
false || (x = 1);
alert (x); // 1
98
Bir şərt halı çox sadədir. Dəyərlərə görə əgər sonda bir düzgün nəticə almazsa
heç bir kod hissəciyi işə düşməyəcəkdir. Gördüyünüz kimi bu halda if istifadə
etmək daha qısa yoldur. Dəyərlər boolen nəticələr qaytaracaqdır. İlki true ,
ikincisi isə false dəyərində işləyəcəkdir. Kodun başa düşülən olması üçün bir
“qayda” istifadə etmək daha yaxşıdır. Ancaq bəzi hallar üçün keçərlidir.
&& (VƏ)
AND vəya iki və işarəsi ilə göstərilir &&:
netice = a & b;
Klassik proqramlaşdırmada hər iki dəyişən düzgün vəya səhvdirsə , AND
istifadə edilir :
alert (true and true); // true
alert (false and true); // false
alert (true and false); // false
alert (false and false); // false
99
İf ilə nümunə:
OR'da olduğu kimi hər hansı istənilən dəyərə AND metodunda istifadə
etmək mümkündür:
AND ilk olaraq yanlış dəyəri tapır
Birdən çox AND dəyəri verilə bilər:
netice = deyer1 && deyer2 && deyer3;
let saat = 12;
let deqiqe = 30;
if (saat == 12 && deqiqe == 30) {
alert ('Saat 12:30-dur');
}
if (1 && 0) { // true and false olaraq nəticə verəcəkdir
alert ("İşləməyəcəkdir. Çünki nəticə yanlışdır");
}
100
AND && operatoru aşağıdakı kimi işləyir:
• Dəyərlər solda sağa doğru yoxlanılır.
• Hər dəyər üçün boolean dəyəri verir. Nə yanlışdırsa, yoxlamağı dayandırıb,
əsl dəyəri verəcəkdir.
• Bütün dəyərlər yoxlanıldıqdan sonra sonuncu dəyər nəticə olaraq
veriləcəkdir.
Başqa sözlə desək AND – ilk false dəyəri vəya son dəyər verilir.
Yuxarıdakı qaydalar OR-a üçündə oxşardır. Fərq isə AND-ın ilk false dəyərində
nəticənin false olmasıdır.
Nümunə:
// əgər ilk arqument düzdürsə,
// AND- ikinci arqumentidə yoxlayır:
alert (1 && 0); // 0
alert (1 and 5); // 5
// əgər ilk arqument səhvdirsə,
// AND- nəticəni verəcəkdir. İkinci yox kimi sayılacaqdır.
alert (null & & 5); // null
alert (0 && "nə olursa olsun"); // 0
101
Həmdə ard arda bir necə dəyər də verə bilərsiniz. İlk false dəyərinin necə
nəticə verdiyinə baxa bilərsiniz:
alert (1 && 2 && null && 3); // null
Bütün dəyərlər düzgün olduğunda son dəyər nəticə olaraq verəcəkdir:
alert (1 && 2 && 3); // 3, sonuncusu
VƏ-nin && operatorundan üstünlüyü
Yəni kod a && b || c &&d əsas olaraq && ifadələrinin mörtərizə daxilində
eyni üstünlüyə sahibdir:
(a && b) || (c &&d).
Eyni ilə OR kimi AND-in yerinə && operatoru istifadə edilə bilər.
Məsələn:
let x = 1;
(x> 0) && alert ('Sıfırdan böyük!');
102
&& nın sağındakı olan şərt ona keçdiyimiz zaman işə salınacaqdır. Yəni,
sadəcə (x> 0) doğru olarsa.
Yəni sadə hala baxsaq bir şərtimiz olur :
&& operatoru qısa yazılışdır. Ama oxunması rahat olduğu halda istifadə
edilir.
Bu səbəblə istənilən halda kod strukturunuza uyğun olanı istifadə edin: istər
& &, istərsə də AND.
! (NOT)
Boolean-de xeyr işarəsi nida işarəsi ilə göstərilir.
Sintaksisi çox sadədir:
let x = 1;
if (x> 0) {
alert ('Sıfırdan böyük!');
}
103
netice =! deyeri;
Operator tək arqument qəbul edir və aşağıdakıları etməyə imkan verir:
1. Şərti boolean tipinə çevirir: true/false.
2. Tərs geri qaytarır.
Məsələn:
Yalnız bunlar üçün deyil başqa tipdə olan dəyəri boolean tipinə çevirmək
üçün istifadə edilir :
Yəni, ilk (!)NOT, dəyəri boolean çevirər yada əksinə, ikincisi də (!)NOT, onu
tərsinə çevirəcəkdir. Sonda, boolean dəyəyirinə sadə çevrilməmiz vardır.
alert (! true); // false
alert (! 0); // true
alert (!! "boş olmayan string"); // true
alert (!! null); // false
104
Eyni nəticəni almağın daha bir yolu vardır. Boolean-dan istifadə edərək.
! (NOT) bütün məntiqi operatorların ən yüksəyidir. Bu səbəblə && veya ||
operatorlarından əvvəl olur.
16. Dövr etmə: while və for
Çox vaxt əməliyyatların təkrarlanması lazım olur. Məsələn 1ilə 10 arasında
rəqəmləri yazdırmaq lazımdır. Dövr etmə bir neçə dəfə ola bilər.
"While" dövr etməsi
While dövretməsi aşağıdakı sintaksislə yazılır:
Şərt düzgün olarsa, dövr etdiriləcək yerdəki kod işə düşür.
Məsələn aşağıdakı dövretmə nəticəsi alarkən <3:
alert (Boolean ("boş olmayan string")); // true
alert (Boolean (null)); // false
while (şərt) {
// kod
// dövr edilənin yazılacağı yer
}
105
Dövr etmə kodun yenilənməsinə deyilir. Yuxarıdakı nümunədə dövretmə 3
dəfə yenilənəckdir.
Əgər yuxarıdakı i++ mənfi olarsa, dövretmə sonsuzluğadək davam edəcəkdir
(teoremdə). Layihədə brauzer bu dövretmənin dayandırılmasının yollarını
izah edir və sever tərəfdə Javascript metodunu dayandıra bilərsiniz.
Hər hansı ifadə və dəyişən (müqayisələr istisna olmaqla) dövretmə metodu
ola bilər. Bunun nəticəsi boolean dəyəri verəcəkdir.
Məsələn while (i!=0) yerinə while(i) yazmaq daha qısa yoldur:
Tək sətirlik kod üçün nöqtəli vergüldən istifadə etmək lazım deyildir.
Dövr etmədə skop daxilində bir ifadə varsa, skopları {...} yazmamaq olar:
let i = 0;
while (i <3) {// 0, sonra 1, sonra 2'yi göstərəcək.
alert (i);
i ++;
}
i = 3;
(i) {// 0 oldanda şərtə görə dövretmə
dayancaqdır.
alert (i);
i--;
}
106
i = 3;
while (i) alert (i--);
"do ... while" dövretməsi
Şərt do..while-dan istifadə edərək şərt yazıla bilər:
Dövretmə əvvəl kodları işə salır sonra isə şərtin düzgünlüyünü
yoxlayacaqdır. Bu şərt sonlanana kimi davam edəcəkdir.
Məsələn:
Bu üsuldan istədiyiniz vaxt istifadə edə bilərsiniz. Ümumilikdə digər : while
(...) {...} şərti istifadə edilir.
"For" dövr etməsi
For dövr etmə metodu ən çox istifadə edilən üsuldur.
do {
// kod hissəsi
} while (şərt);
let i = 0 ;
do {
alert (i);
i ++;
} while (i<3);
107
Sintaksisi aşağıdakı kimidir:
Aşağıdakı nümunədən bu metodun mənasına baxaq. Aşağıdakı dövretmədə
i 0 və 3 arasında alert işə düşür:
For-un hissələrinə bir-bir baxaq:
Hissələr
Başlanğıc - i = 0 Dövretmə başladıqdan sonra bir dəfə işə salınır.
Şərt - i <3 Hər dövretmə yenilənməsində yoxlanılır. Səhv olarsa, dövretmə
dayanacaqdır.
Addım – i++ şərtdən sonra işə düşür.
Kod hissəsi alert(i) şərt düzgün olduğu halda təkrar olaraq işə düşəcəkdir.
for (başlangıc; şərt; addım) {
// ... kod hissəsi...
}
(i = 0; i <3; i ++) {{0, sonra 1, sonra 2-ni göstərir.
alert (i);
}
108
Ümumi dövretmə alqoritması aşağıdakı kimi işləyir:
İşə sal və başla
Başlat
→ (əgər düzdürsə → kod hissəsini işə sal və addım at)
→ (əgər düzdürsə → kod hissəsini işə sal və addım at)
→ (əgər düzdürsə → kod hissəsini işə sal və addım at)
→ ...
Dövretmələri anlamaqda yenisinizsə, aşağıdakı nümunədə daha açıq şəkildə
baxa bilərsiniz:
// for (let i = 0; i <3; i ++) alert (i)
// dövretmə işə başladı
let i = 0
// əgər düzdürsə → kod hissəsini işə sal və addım at
if (i <3) {alert (i); i ++}
// əgər düzdürsə → kod hissəsini işə sal və addım at
if (i <3) { alert (i); i ++}
// əgər düzdürsə → kod hissəsini işə sal və addım at
if (i <3) { alert (i); i ++}
// ... son, if i = = 3 dir.
109
Sətir içində dəyişən verilməsi
Burada “counter” dəyişəni tam dövretmədə bildirilir. Buna “sətir içi” dəyişən
deyilir. Bu cür dəyişənlər sadəcə dövretmə içində verilə bilər.
Dəyişən yaratmaq yerinə mövcud olanı istifadə edə bilərsiniz:
Kod sturukturunda qısaltmalar
Yazılmış kodda hər hansı bir hissəni yazmaya bilərsiniz. Nümunə olaraq
dövretmədə başlanğıcı ata bilərik.
Nümunə :
((i = 0; i <3; i ++) {
alert (i); // 0, 1, 2
}
alert (i); // xəta belə dəyişən yoxdur
let i = 0;
(i = 0; i <3; i ++) {// olan bir dəyişəndən istifadə edin
alert (i); // 0, 1, 2
}
alert (i); // 3 dəyər alacaqdır.
110
Bu (i<3) ilə eyni dövretməni edəcəkdir.
Əslində sonsuz dövretmə yaradaraq şərti poza bilərik:
for (;;) {
// sonsuz təkrarlama
}
Nöqtəli vergülü yazmağı unutmayın. Bu xətaya səbəb ola bilər.
Dövretməni dayandırma
Normalda səhv olarsa, dövretmə davam edir.
Ancaq xüsusi break metodunu istifadə edərək istənilən yerdə dövretməni
dayandıra bilərsiniz.
Məsələn aşağı halda prompta heç bir dəyər verilmədikdə “break” şəklində
sorğu işə düşəcəkdir:
let i=0, // dəyişəni bildirdik
((i <3; i ++) {// "başlama" hissəsi lazım deyil
alert (i); // 0, 1, 2
}
Addım hissəsini də yazmıya bilərik:
let i = 0;
(; i <3;) {
alert (i ++);
}
111
İstifadəçi boş dəyər vəya imtina edərsə, break bu (*) sətirdən sonra işə
düşəcəkdir. Ondan sonra isə dövretməni dayandıracaqdır. Yəni bildiriş
dayanacaqdır.
“sonsuz dövretmə” – də break-dən istifadə çox yaxşıdır. Çünki dövretməyə
nəzarət etmək lazım olduqda istifadə edilə bilinir. Break istənilən yerdə və
hətta bir necə yerdə istifadə edilə bilər.
Continue ilə davam etmə
Continue break-in daha yüngül bir versiyasıdır. Bütün dövretməni
dayandırmaz. Bunun yerinə hal-hazırkı yenilənməni dayandıracaqdır və
dövretmənin yenisinin başlanmasını tələb edəcəkdir.
Aşağıdakı dövretmədə sadəcə tək dəyərlərdən istifadə olunur:
let cem = 0;
while (true) {
deyer = + prompt ("ədəd yazın", ' ');
if (! deyer) break; // (*)
cem + = deyer;
}
((i = 0; i <10; i ++) {
// düzgündürsə, qalan hissəni keç
if (i% 2 == 0) continue;
alert (i); // 1, sonra 3, 5, 7, 9
}
112
i-nin dəyərləri üçün , yoxlama müddəti birincidən sonra üçün təsir göstərir.
Bu səbəblə alert həmişə tək dəyərlər üçün çağıralacaqdır.
Continue iç-içə yazılışı azaltmağa kömək edir.
Tək dəyərləri göstərən dövretmə aşağıdakı kimi görünür:
Texniki cəhətdən baxdıqda yuxarıdakı nümunə ilə eynidir. Əlbətdə həmişə
istifadə etmək yerinə kodu if blokunda yaza bilərik.
Ancaq mənfi cəhəti odurki, iç-içə yazılış şəklidir. Kod bir neçə sətirdən
uzundursa, umumilikdə oxunması çətinləşəcəkdir.
break/continue yerinə '?'-dən istifadə
Yadda saxlayın sintaksis cəhətdən başadüşülən şəkildə yazmaq üçün ? -dən
istifadə etməyin. Əsasəndə continue/break -də istifadə edilmir.
Məsələn :
((i = 0; i <10; i ++)
{
if (i% 2) {
alert (i);
}
}
if (i> 5) {
alert (i);
} else {
continue;
}
113
... və ?-ilə yazılmış versiyası:
(i> 5)? alert (i): continue; // davam etməsinə icazə verilmir.
Kod işləməyi dayandıracaqdır. Bunun kimi kod sintaksisi xəta verəcəkdir.
Continue/break üçün etiketlər
Bəzən eyni anda birdən çox iç içə dövretmədən çıxmaq lazım olur.
Məsələn aşağıdakı kodda i və j dən dövretmə qurmaq olur. (i,j) (0,0)-(3,3)
Koordinatlarını görmək istədikdə :
Dövretməni dayandırmaq üçün istifadəçidən dəyər almağa ehtiyacımız var.
((i = 0; i <3; i ++) {
(j = 0; j <3; j ++) {
let input = prompt (`Kodlardakı dəyər ($ {i}, $ {j})`, '');
// Bu hissədən tamamlandı hissəsinə çıxmaq istədikdə?
}
}
alert ('Tamamlandı');
114
Dəyərdən (input) sonra yazılan break dövretməni dayandırar. Ancaq lazımı
etiket deyildir.
Etiket dövretməyə verilmiş addır:
Aşağıdaki dövretmədə ifadesi həmən dövretməni
dayandıracaqdır:
Yuxarıdakı kodda outer yuxarı qaldırdıqda.
Beləliklə idarə tamamilə (*)-dan alert-ə doğru gedəcəkdir:
labelName: for (...){
...
}
outer: for (i = 0; i <3; i ++) {
(j = 0; j <3; j ++) {
let input = prompt (`Kodlardakı dəyər ($ {i}, $ {j})`, '');
// boş bir array vəya imtina edilərsə, dövretməni dayandır
if (! input) break outer; // (*)
// dəyər olarsa, işlə ...
}
}
aler (Yaxşı!');
115
Continue ayrılıqda başqa etiket ilə istifadə edilə bilər. Bu zaman etiket
başqa təkrarlanarsa, ona ötürələcəkdir.
Etiketler "goto" deyildir.
Etiketlər kodu istədiyimiz yerdə idarə etməyə imkan verir.
Məsələn adi halda bunu etmək mümkün deyildir:
break etiket; // etiket ötürüləcək? Yox.
etiket: for (...)
Etiket continue/break metodunda əvvəldə olmalıdır.
Nəticə
3 növ dövretməyə baxdıq :
• while – Hər yenilənmədə vəziyyəti yoxlayır.
• do..while – Hər yenilənmədən sonra yoxlanılır.
• for (;;) – Şərt hər yenilənmədə yoxlanılır. Əlavə parametrlər əlavə edilə bilinir.
outer
(for i = 0; i <3; i ++) {...}
116
“Sonsuz” dövretmə almaq üçün çox vaxt while (true) dəyəri istifadə edilir. Bunu
dayandırmaq üçün break-dan istifadə edilir.
Mövcud yenilənmədə başqa bir şey etmək istəmiriksə, continue-dan istifadə edə
bilərik.
Etiket break/continue-dan əvvəl yazılır. Etiketi ilə kənar dövretəməyə
break/continue ilə təsir etməyin tək yoludur.
17. "Switch"
“Switch” ilə çoxlu şərt (if) qoymaq mümkündür. Bizə çox seçim imkanı verir.
Sintaksisi
“Switch”-də istənilən sayda bloklar və default dəyər olur.
Nümunə:
switch (x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
117
• x'in dəyəri, birincidən, sonradan ikinciyə qədər olan bərabərlik yoxlanılır.
• Bərabərlik olarsa, break-in olduğu yerə qədər ən yaxın kod işləyəcəkdir.
• Heç bir hal uyğunlaşmazsa, default dəyər işləyəcəkdir. (varsa)
Nümunə:
Burada 3 şərt üçün yoxlamağa başlayır. Əgər heç biri uyğun olmazsa,
default-da olan şərt işə düşəcəkdir.
let a = 2 + 2;
switch (a) {
case 3:
alert ('Çox kiçik');
break;
case 4:
alert ('Orta');
break;
case 5:
alert ('Çox böyük');
break;
default:
alert ("Belə dəyərləri bilinmir");
}
118
Break olmazsa, bütün şərtlər yoxlanılaraq sonuncu şərtə kimi davam
edəcəkdir. Nümunə:
Yuxarıdakı nümunədə 3 alert-in ardıcıllıqla işə düşməsini görəcəksiniz :
alert ('Orta');
alert ('Çok böyük');
alert ("Belə dəyər yoxdur ");
İstənilən ifadə switch/ case-in arqumenti ola bilər. Həm break həmdə case-
siz yazıla bilər.
let a = 2 + 2;
switch (a) {
case 3:
alert ('Çok kiçik');
case 4:
alert ('Orta');
case 5:
alert ('Çok böyük');
default:
alert ("Belə dəyər yoxdur");
}
119
Nümunə:
Burada + a 1- verəcəkdir. Bu halda b + 1 ilə müqayisə etdiriləcəkdir və
uyğun olan hissədəki kod işə düşəcəkdir.
3>10>10> Dostları ilə paylaş: |