JavaScript dilinde üç tane mantıksal operatör bulunmaktadır: || (OR â VEYA ), &&(AND â VE ), ! (NOT â DEÄİL )
Mantıksal operatörler olarak adlandırılsalar bile, her tipteki deÄer için uygulanabilirler. Sadece boolean ( doÄru-yanlıÅ) deÄerleri için deÄil. Sonuçta her tipte olabilir.
Detaylarına bakılacak olursa:
|| (OR â VEYA)
âORâ,âVEYAâ operatörü iki dikey çizgiden oluÅur.
sonuc = a || b;
Klasik programlamada, mantıksal VEYA sadece boolean verileri deÄiÅtirme için kullanılır. EÄer iki deÄerden biri true ise sonuç true döner. DiÄer türlü sonuç false döner.
JavaScriptâte ise bu biraz daha karmaÅık ve daha güçlü. Fakat önce boolean deÄerlere ne oluyor buna bakalım.
Dört farklı mantıksal kombinasyon bulunmakta:
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
Her iki tarafın da false olmadıÄı her durumda sonuç true olmakta.
EÄer operanda yani iÅleme giren deÄerler boolean deÄil ise boolean deÄere çevrilir.
ÃrneÄin, sayı olan 1 true demek sayı olan 0 ise false demektir.
if (1 || 0) { // ( true || false ) ile aynı anlama gelir
alert( 'DoÄru!' );
}
ÃoÄu zaman, VEYA || if yapısı içerisinde kullanılır. Herhangi biri doÄruysa yap anlamı taÅımaktadır.
ÃrneÄin:
let saat = 9;
if (saat < 10 || saat > 18) {
alert( 'Ofis Kapalı' );
}
Birçok Åart cümlesi ile if yapısını kurabilirsiniz.
let saat = 12;
let haftaSonu = true;
if (saat < 10 || saat > 18 || haftaSonu) {
alert( 'Ofis Kapalı.' ); // Haftasonu
}
VEYA ilk doÄru deÄeri arar
Yukarıda belirtilen mantık klasik mantıktır. JavaScriptâin âekstraâ özelliklerine bakılacak olursa
GeliÅtirilmiÅ algoritma Åu Åekildedir.
Birden fazla VEYA ile yapılmıŠif yapısı:
sonuc = deger1 || deger2 || deger3;
VEYA "||" operatörü Åunları yapar:
- Soldan saÄa olacak Åekilde operandları deÄerlendirir.
- Her operandın deÄerini booleanâa çevirir. EÄer sonuç
doÄruise durur ve o operandın orjinal deÄerini döner. - EÄer tüm operandlar kontrol edildi ve tamamı yanlıŠise son operandı döner.
EÄer VEYA zincirinde bir tane doÄru bulunursa o an dönülür. EÄer bulunamazsa sonuncusu döner.
ÃrneÄin:
alert( 1 || 0 ); // 1 (1 doÄru)
alert( true || 'önemsiz' ); // (true doÄru)
alert( null || 1 ); // 1 (1 tek doÄru veri)
alert( null || 0 || 1 ); // 1 (1 tek doÄru veri)
alert( undefined || null || 0 ); // 0 (Hepsi yanlıŠsonuncusunu döner)
Bu klasik âbooleanâ VEYA tanımını aÅarak ilginç kullanımlara neden olmaktadır.
-
DeÄiÅken veya ifadeler dizisinde ilk doÄru(true) deÄeri bulmak için
DüÅünün bir diziniz var ve içinde
null/undefineddeÄerler barındırmakta. Siz ilk veriyi bulduÄunuzda döndürmek istiyorsunuz.Bunun için
||kullanabilirsiniz:let simdikiKullanici = null; let varsayilanKullanici = "Akif"; let isim = simdikiKullanici || varsayilanKullanici || "isimsiz"; alert( isim ); // "Akif" seçilir â ilk doÄru deÄeri bulduÄundan dolayı buradan dönülür ve ekrana "Akif" çıkar.EÄer
simdikiKullanicivevarsayilanKullaniciyanlıÅ(false) olsaydı"isimsiz"yazısı ekrana çıkacaktı. -
Kısa devre deÄerlendirmesi
Operantlar sadece deÄer deÄil ifade de olabilir. VEYA testlerini soldan saÄa doÄru yapar. DoÄru deÄer bulunduÄunda döndürülür. Bu olaya kısa devre deÄerlendirmesi denir, çünkü soldan saÄa en kısa yoldan gitmektedir.
Tabi bunun ifadelere yan etkisi olabilir. ÃrneÄin deÄer atama
AÅaÄıdaki örnek çalıÅtıÄında
xâe deÄer atanmayacak:let x; true || (x = 1); alert(x); // tanımsız, çünkü (x = 1) ifadesi çalıÅtırılmadıEÄer
ifyapısında ilk deÄerfalseise bir sonrakine bakılır bu da Åu Åekilde sonuç verir:let x; false || (x = 1); alert(x); // 1GördüÄünüz gibi deÄer atandı. Böyle basit bir durumda yan etki görmezden gelinebilir.
Kısa yoldan
ifyapısında olduÄu gibi ilk operand booleanâa çevrilir ve eÄer yanlıÅsa ikinci deÄer çalıÅtırılır.ÃoÄu zaman normal
ifyapısını kullanmanız daha iyidir çünkü kod daha anlaÅılır olur. Fakat bazen kısa yoldanifyapmakta iÅinize yarayabilir.
&& (AND â VE )
Ve operatörü iki tane & iÅaretiyle tanımlanmaktadır.
sonuc = a && b;
Klasik programlamaya göre eÄer iki operandda doÄru ise doÄru, diÄer türlü yanlıŠdöner.
alert( true && true ); // true
alert( false && true ); // false
alert( true && false ); // false
alert( false && false ); // false
if ile bir örnek:
let saat = 12;
let dakika = 30;
if (saat == 12 && dakika == 30) {
alert( 'Saat 12:30' );
}
VEYAâda olduÄu gibi VE operatörü de her türlü deÄeri kabul eder.
if (1 && 0) { // true && false Åeklinde deÄerlendirilmiÅtir.
alert( "ÃalıÅmaz çünkü sonuç `yanlıÅ` " );
}
VE ilk yanlıŠdeÄeri görür
AÅaÄıda 3 tane AND iÅlemine sokulmuÅ deÄer bulunmaktadır:
sonuc = deger1 && deger2 && deger3;
AND "&&" operatörü aÅaÄıdaki gibi çalıÅır:
- Operandları soldan saÄa doÄru deÄerlendir.
- Her bir operandı boolean deÄere çevir. EÄer sonuç
yanlıÅise dur ve operatörün orijinal deÄerini döndür. - EÄer diÄer operandlara eriÅim saÄlandıysa ( hepsinin doÄru olma durumu ) sondaki operandı döndür.
Yukarıdaki kurallar VEYA kuralları ile benzerlik göstermektedir. Farklılık AND operatörünün ilk yanlıŠbulduÄunda dönmesi. OR operatörü ise ilk doÄru bulduÄunda dönmekteydi.
Ãrnek:
// EÄer ilk operand doÄru ise her halükarda ikincinin deÄeri dönecek.
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// İlk operand yanlıŠise ilk operandı döner ikinci operand pas geçilir.
alert( null && 5 ); // null
alert( 0 && "önemi yok" ); // 0
Birden fazla VEâyi if yapısıyla kullanmak mümkündür.
alert( 1 && 2 && null && 3 ); // null
Tüm deÄerler doÄru ise sonuncu deÄer döner.
alert( 1 && 2 && 3 ); // 3, sonuncu deÄer
&& VEYAâdan || önce çalıÅır.VEânin && önceliÄi VEYAâya || göre daha yüksektir. Bundan dolayı VEYAâdan önce çalıÅır.
AÅaÄıdaki örnekte 1 && 0 önce hesaplanır.
alert( 5 || 1 && 0 ); // 5
VEYAâda olduÄu gibi VEâde de operatör bazen if yerine kullanılabilir.
ÃrneÄin:
let x = 1;
(x > 0) && alert( 'Sıfırdan Büyük' );
SaÄ taraftaki bildirim sadece deÄerlendirme oraya kadar gelebilirse çalıÅır. Bunun için de x>0âın doÄru dönmesi gerekmektedir.
Aslında aÅaÄıdaki ile benzerdir:
let x = 1;
if (x > 0) {
alert( 'Sıfırdan büyük!' );
}
&& ile yazılan çeÅidi daha kısa gibi görünse de aslında if ile yazılanın daha okunabilir olduÄu açıktır.
Bundan dolayı her yapıyı amacına göre kullanmanız önerilir. EÄer if kullanmak istiyorsanız if yazarak kullanın. EÄer VE kullanmak istiyorsnaız && yazarak kullanın.
! (DEÄİL)
Boolean deÄil operatörü "!" ile tanımlanmıÅtır.
Yazımı çok kolaydır:
result = !value;
Operatör tek operanddan oluÅur ve aÅaÄıdaki Åekilde çalıÅır:
- Operand deÄerini boolean tipine çevir:
true/false - Tersini geri döndür.
ÃrneÄin:
alert( !true ); // false
alert( !0 ); // true
Ãift DEÄİL iÅareti deÄeri boolean tipine çevirmeye yarar:
alert( !!"BoÅ olmayan karakter dizisi" ); // true
alert( !!null ); // false
Birinci DEÄİL deÄeri booleana çevirir ve tersini alır. İkincisi ise tersinin tersini alarak deÄeri orjinal halinin boolean haline çevirir.
Aynı Åeyi Boolean fonksiyonu ile de yapmak mümkündür.
alert( Boolean("boÅ olmayan karakter dizisi") ); // true
alert( Boolean(null) ); // false
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)