# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/kosullu-ifadeler/if-else-else-if.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
