> 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/switch-case-break.md).

# switch - case - break

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

**`switch`** ile **`if`** benzer işlemler için kullanılır. **`if`** ***koşula*** göre **`switch`** ***duruma*** göre çalışır. Örnek.

{% code lineNumbers="true" %}

```javascript
let gun = prompt('Lütfen 1-7 arasında bir sayı giriniz','1');

switch (gun) {
    case '1': alert('Pazartesi'); break;
    case '2': alert('Salı'); break;
    case '3': alert('Çarşamba'); break;
    case '4': alert('Perşembe'); break;
    case '5': alert('Cuma'); break;
    case '6': alert('Cumartesi'); break;
    case '7': alert('Pazar'); break;
}
```

{% endcode %}

**`switch - case`** ile tiplerin önemi vardır. Sıkı eşitlik kullanır. **`prompt`** ile aldığımız her verinin **`string`** tipinde olduğunu biliyoruz. O halde deneyelim.

{% code lineNumbers="true" %}

```javascript
let gun = prompt('Lütfen 1-7 arasında bir sayı giriniz','1');

switch (gun) {
    case 1: alert('Pazartesi'); break;
    case 2: alert('Salı'); break;
    case 3: alert('Çarşamba'); break;
    case 4: alert('Perşembe'); break;
    case 5: alert('Cuma'); break;
    case 6: alert('Cumartesi'); break;
    case 7: alert('Pazar'); break;
}
//hiçbir uyarı vermez.
```

{% endcode %}

Yukarıdaki örnekten hiçbir uyarı alamazsınız çünkü **`gun`** değişkeninin veri tipi **`string`** ve biz **`number`** tipinde karşılaştırmalar yaptık. **`switch`** deyimi sıkı eşitlik kullandığı için hiçbir durum gerçekleşmedi.

**`switch - case`** yapısında bir durumun gerçekleşmesi ile yürütme başlar ve ilk **`break`** komutuna kadar kodlar yürütülür. Bu sebeple **her duruma `break` komutu koymak gereklidir.** Örnek.

{% code lineNumbers="true" %}

```javascript
let trafikLambasi = 'Sarı';
switch (trafikLambasi) {
    case 'Kırmızı':
        alert('BEKLE');
    case 'Sarı':
        alert('HAZIR OL');
    case 'Yeşil':
        alert('İLERLE');
}
```

{% endcode %}

Yukarıdaki örneği 'Yeşil' yaparak denerseniz sadece 'İLERLE' uyarısı alırsınız. 'Kırmızı' yaparsanız tüm durumlardaki uyarılar çalışır. Deneyebilirsiniz.

**`switch`** yapısında **`case`** ile ifade ettiğiniz hiçbir durum gerçekleşmez ise **`default`** deyimi ile durum gerçekleşmesine bağlı olmadan kodlar yürütebilirsiniz. En sonda yazılması gereklidir. Örnek.

{% code lineNumbers="true" %}

```javascript
let httpRes = '301';
switch (httpRes) {
    case '200':
        alert('BAĞLANTI BAŞARILI');
        break;
    case '404':
        alert('SAYFA BULUNAMADI!');
        break;
    case '500':
        alert('SUNUCU HATASI');
        break;
    default: // hiçbir case ile uyuşmadığı için burası çalışır.
        alert('Bilinen bir http durumu belirtilmedi.');  
}
```

{% endcode %}

## `case` Gruplama

Bazı durumlarda aynı şeyleri yapmak gerekiyorsa kodları tekrar etmeye gerek kalmadan **`case`** deyimlerini alt alta yazarak gruplayabilirsiniz. Örnek.

{% code lineNumbers="true" %}

```javascript
let ay = prompt('Küçük harflerle bir ay ismi giriniz:', '');
switch (ay) {
    case 'aralık':
    case 'ocak':
    case 'şubat':
        alert('Kış mevsimindesiniz.');
        break;
    case 'mart':
    case 'nisan':
    case 'mayıs':
        alert('İlkbahar mevsimindesiniz.');
        break;
    case 'haziran':
    case 'temmuz':
    case 'ağustos':
        alert('Yaz mevsimindesiniz.');
        break;
    case 'eylül':
    case 'ekim':
    case 'kasım':
        alert('Sonbahar mevsimindesiniz.');
        break;
    default:
        alert('Doğru bir şekilde giriş yapmadınız.');  
}
```

{% endcode %}

**`switch`** ile **`if`** kullanımının bazı farkları aşağıda verilmiştir.

| if                                                                                                            | switch                                                                            |
| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| ***Koşula*** göre çalışır. Koşul her zaman **`Boolean`** tipindedir.                                          | ***Duruma*** göre çalışır. Durum herhangi bir tipte olabilir.                     |
| Yürütülecek kodları ***koşula*** göre **`if - else - else if`** ile farklılaştırırız.                         | Yürütülecek kodları ***duruma*** göre **`case - default`** ile farklılaştırırız.  |
| Değişken tipleri önemsizdir. Koşuldaki ifadeye göre **`Boolean`** sonuç üzerinden kodlar yürütülür.           | Değişken tipleri önemlidir. Durumdaki değer ve tip üzerinden kodlar yürütülür.    |
| Gerçekleşen koşul ile ilgili blok yürütülür.                                                                  | Gerçekleşen durumla birlikte ilk **`break`** komutuna kadar kodlar yürütülür.     |
| Koşullarda **`<=`**, **`>=`**, **`!=`**, **`!==`**, **`==`** veya **`===`** ile karşılaştırmalar yapabiliriz. | Durumlarda her zaman  sıkı karşılaştırma (**`===`**) yapılır.                     |
| Koşullar mantıksal operatörler ile birbirine bağlanır.                                                        | Durumlar gruplanarak birbirine bağlanır.                                          |
| Hiçbir koşul gerçekleşmez ise **`else`** deyimi ile kod bloğu yürütebiliriz.                                  | Hiçbir durum gerçekleşmez ise **`default`** deyimi ile kodlarımızı yürütebiliriz. |
