> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/kosullu-ifadeler/if-else-else-if.md).

# if - else - else if

Javascript'te bu ifadeleri yazarken küçük harflerle yazdığınıza emin olunuz.

## `if` Deyimi

**`if`** deyimini bir koşul ile ifade haline getirip koşul doğru olduğunda yapılacak işlemleri bir kod bloğu olarak ifade ederiz. Örnek.

{% code lineNumbers="true" %}

```javascript
let yas = prompt('Yaşınızı Giriniz', 20) ;
if ( +yas >= 15) {
    alert('Kimlik kartınızda fotoğraf olmak zorundadır.');
}
```

{% endcode %}

Eğer yukarıdaki **`yas`** değişkeni için 15'ten daha küçük bir sayı girerseniz herhangi bir uyarı almazsınız. Çünkü koşul doğrulanmaz ise (**`true`**) **`if`** bloğundaki kodlar yürütülmez.

**`if`** bloğunun çalışma mantığı şu şekildedir.

{% code lineNumbers="true" %}

```javascript
let kosul;
if (true) {
    kosul = 'truthy';
}
if (false) {
    kosul = 'falsy';
}
alert(kosul);
```

{% endcode %}

**`if (kosul)`** bloğundaki kodlar koşul gerçekleşirse (**`true`**) yürütülür, gerçekleşmezse (**`false`**) yürütülmez. Bunu **`true`** ve **`false`** değerlerinin matematiksel karışıkları ile de yapabiliriz.

{% code lineNumbers="true" %}

```javascript
let kosul;
if (1) {
    kosul = 'truthy';
}
if (0) {
    kosul = 'falsy';
}
alert(kosul);
```

{% endcode %}

Koşul ifadesini **`if (kosul)`** satırında yazmak yerine bir değişken değeri olarak ele almak daha yaygın bir kullanımdır.

{% code lineNumbers="true" %}

```javascript
let kosul = ( yas = prompt('Yaşınızı Giriniz', 20), +yas >= 15 );
if (kosul) {
    alert('Kimlik kartınızda fotoğraf olmak zorundadır.');
}
```

{% endcode %}

Bir değişkenin tipini kontrol edip değiştirelim. Örnek.

{% code lineNumbers="true" %}

```javascript
let telefon = prompt('Telefon No Giriniz', 5554443322) ;
if (typeof telefon == 'string') {
    telefon = Number(telefon);
    //veya telefon = +telefon
    alert(typeof telefon);
}
```

{% endcode %}

**`if`** blokları iç içe kullanılabilir.  '**nested**' olarak adlandırılan bu yapılarda unutulmaması gereken dıştaki **`if`** bloğundaki koşul **gerçekleşmezse** içerideki **`if`** bloklarındaki koşulların bir öneminin olmadığıdır.

{% code lineNumbers="true" %}

```javascript
let saat = prompt('Saati örneğe uygun olarak giriniz.', '17.00');
let onay = confirm("12'lik Düzene Çevrilsin mi?");
if (onay) {
    if (saat.slice(0.2) >= 12) {
        saat = saat.slice(0,2) - 12 + saat.slice(2) + ' Ö.S.'
    }
    if (saat.slice(0.2) < 12) {
        saat = saat + ' Ö.Ö'
    }
}
alert(saat);
```

{% endcode %}

Aynı ifade şu şekilde de kodlanabilir.

{% code lineNumbers="true" %}

```javascript
let saat = prompt('Saati örneğe uygun olarak giriniz.', '17.00');
let onay = confirm("12'lik Düzene Çevrilsin mi?");
if (onay) {
    saat.slice(0,2) >= 12 ? saat = saat.slice(0,2) - 12 + saat.slice(2) + ' Ö.S.'
                          : saat = saat + ' Ö.Ö';
}
alert(saat);
```

{% endcode %}

Kodun okunurluğu açısından iki yazımı da değerlendiriniz.

Yukarıdaki iç içe **`if`** örneğinde gördüğünüz içteki ikinci **`if`** deyimi esasında gereksizdir. Koşulun gerçekleşmediği durumu yeni bir **`if`** bloğu ile kontrol etmeye gerek yoktur. Bunun için **`else`** deyimini kullanırız.

## `else` Deyimi

**`if`** deyimi ile ifade ettiğimiz koşulun gerçekleşmediği durumlarda yapılacak işlemleri bir kod bloğu ile gerçekleştirmek için **`else`** deyimini kullanırız. Örnek.

{% code lineNumbers="true" %}

```javascript
let yas = prompt('Yaşınızı Giriniz', 20) ;
if (yas >= 15) {
    alert('Kimlik kartınızda fotoğraf olmak zorundadır.');
} else {
    alert('Kimlik kartınızda fotoğraf olmak zorunda değildir.');
}
```

{% endcode %}

Eğer yukarıdaki **`yas`** değişkeni için 15'ten daha küçük bir sayı girerseniz **`else`** bloğu yürütülür. Çünkü koşul doğrulanmaz ise (**`false`**) **`else`** bloğundaki kodlar yürütülür.

**`else`** bloğunun çalışma mantığı şu şekildedir.

{% code lineNumbers="true" %}

```javascript
let kosul = false;
if (kosul) {
    kosul = 'truthy';
} else {
    kosul = 'falsy';
}
alert(kosul);
```

{% endcode %}

İç içe **`if`** örneğini yeniden yazacak olursak.

{% code lineNumbers="true" %}

```javascript
let saat = prompt('Saati örneğe uygun olarak giriniz.', '17.00');
let onay = confirm("12'lik Düzene Çevrilsin mi?");
if (onay) {
    if (saat.slice(0.2) >= 12 {
        saat = saat.slice(0,2) - 12 + saat.slice(2) + ' Ö.S.'
    } else { //yeni koşula gerek yok.
        saat = saat + ' Ö.Ö'
    }
}
alert(saat);
```

{% endcode %}

**`else`** deyimi koşulun gerçekleştiği durum haricindeki **her şeydir**. Bu sebeple **`else`** deyiminin sadece iki ihtimalin olduğu veya son ihtimalin kaldığı durumlarda kullanılmasına dikkat edilmelidir.

## **`else if`** Deyimi

**`else if`** deyimi koşulları birbirine bağlayıp sıralı şekilde işlemleri yaptırmak için kullanılır. Şu örneğe bir göz atalım.

{% code lineNumbers="true" %}

```javascript
let kanSayimi = prompt('Tam kan sayımı sonucunu giriniz', 310);
let degerlendirme;
if (kanSayimi <= 112) {
    degerlendirme = 'Düşük';
}
if (kanSayimi >= 112 && kanSayimi <= 508) {
    degerlendirme = 'Normal';
}
if (kanSayimi >= 508) {
    degerlendirme = 'Yüksek';
}
alert(degerlendirme);
```

{% endcode %}

Yukarıda birbirinden bağımsız **`if`** bloklarının hepsi yürütülür. Her blokta **`kanSayimi`** ile başlayan koşulu kontrol eder. Bu hem performansı etkileyen hem de yazımı zorlaştıran bir durumdur. Bunun yerine **`else if`** ile koşulları birbirine bağlayıp sadece koşulun sağlandığı bloğu yürütmek daha kullanışlıdır. Deneyiniz.

{% code lineNumbers="true" %}

```javascript
let kanSayimi = prompt('Tam kan sayımı sonucunu giriniz', 310);
let degerlendirme;
if (kanSayimi <= 112) {
    degerlendirme = 'Düşük';
} else if (kanSayimi <= 508){
    degerlendirme = 'Normal';
} else {
    degerlendirme = 'Yüksek';
}
alert(degerlendirme);
```

{% endcode %}

Eğer **`else if`** bloğu kullandıysanız sonunda kesinlikle **`else`** bloğu olmalıdır. Hiçbir koşulun sağlanmadığı durumu da **`else`** bloğu ile kesinlikle kontrol etmek zorundasınız. Bu sebeple en az üç ihtimalin olduğu durumlarda kullanmalısınız.

{% code lineNumbers="true" %}

```javascript
let cevap = prompt("Türkiye AB'ye girmeyi hangi yıl reddetmiştir?",'');
if (cevap > 1978) {
    alert('Daha geçmiş yıllarda..');
} else if (cevap < 1978) {
    alert('Daha sonraki yıllarda..');
} else {
    alert('Doğru');
}
```

{% endcode %}

Yukarıdaki örnek **`if else`** ile de yapılabilir fakat cevaba göre yürütülecek kodları farklılaştıramazsınız, tekil olur. Bu sebeple **`if-else-else if`** yapısı koşulların gerçekleşmediği durumlara göre kod yürütmek için oldukça elverişlidir.

{% hint style="info" %}
**`if`** deyiminin satırındaki koşullar **`()`** arasına yazılmasa da çalışır fakat kodun okunurluğu açısından kullanmanız önerilir.
{% endhint %}

Eğer **`if-else-else if`** bloklarında tek satırlık kodlarınız var ise blok açmanıza gerek kalmadan tek satırda da yazabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let cevap = prompt("Türkiye AB'ye girmeyi hangi yıl reddetmiştir?",'');
if (cevap > 1978) alert('Daha geçmiş yıllarda..');
else if (cevap < 1978) alert('Daha sonraki yıllarda..');
else alert('Doğru');
```

{% endcode %}
