10 Nisan 2016 Pazar

Javascript'de Karar İfadeleri ve Hata Yönetimi

Merhaba Webkolog Takipçileri!

Bugün JavaScript'in karar mekanizmalarına ve hatalarla nasıl başa çıkacağımıza odaklanacağız: karar ifadeleri ve try...catch blokları. Kodunuzun dinamik olmasını, farklı durumlara göre farklı davranışlar sergilemesini ve beklenmedik sorunlar karşısında çökmemesini istiyorsanız, bu konuları iyi kavramanız şart. Hadi başlayalım!


1. Karar İfadeleri: Kodunuzun Akışını Yönetin

Karar ifadeleri, belirli koşullar sağlandığında veya sağlanmadığında farklı kod bloklarının çalıştırılmasını sağlar. Bu sayede programınız daha akıllı ve etkileşimli hale gelir.

if, else if, else Yapısı

Bu yapı, en temel ve en sık kullanılan karar ifadesidir. Belirli bir koşulun doğru olup olmadığını kontrol eder.

  • if: Belirtilen koşul doğru (true) ise kod bloğunu çalıştırır.
  • else if: İlk if koşulu yanlışsa ve başka bir koşulu kontrol etmek istiyorsanız kullanılır. İstediğiniz kadar else if ekleyebilirsiniz.
  • else: Tüm if ve else if koşulları yanlışsa çalışacak olan kod bloğudur.

    let saat = 14;

    if (saat < 12) {
        console.log("Günaydın!");
    } else if (saat < 18) {
        console.log("İyi günler!");
    } else {
        console.log("İyi akşamlar!");
    }
    // Çıktı: "İyi günler!"
Ternary (Koşul) Operatörü ?:

Kısa ve tek satırlık if...else yapıları için pratik bir alternatiftir. Söz dizimi şöyledir: koşul ? doğru ise çalışacak : yanlış ise çalışacak;


    let yas = 20;
    let oyKullanmaDurumu = (yas >= 18) ? "Oy kullanabilir." : "Oy kullanamaz.";
    console.log(oyKullanmaDurumu); // Çıktı: "Oy kullanabilir."
switch İfadesi

Çok sayıda farklı koşulu kontrol etmeniz gerektiğinde switch ifadesi, birden fazla if...else if zincirine göre daha okunaklı ve düzenli bir alternatif sunar. Bir değişkenin değerini farklı case değerleriyle karşılaştırır.

  • case: Eğer değişkenin değeri case değeriyle eşleşiyorsa, o blok içindeki kod çalışır.
  • break: Eşleşen case bulunduğunda ve kod çalıştırıldığında, switch bloğundan çıkılmasını sağlar. Bunu kullanmazsanız, eşleşen case'den sonraki tüm case blokları da çalıştırılır (fall-through).
  • default: Hiçbir case ile eşleşme olmazsa çalışacak olan bloktur. (İsteğe bağlıdır.)

    let gunNo = 3;
    let gunAdi;

    switch (gunNo) {
        case 1:
            gunAdi = "Pazartesi";
            break;
        case 2:
            gunAdi = "Salı";
            break;
        case 3:
            gunAdi = "Çarşamba";
            break;
        case 4:
            gunAdi = "Perşembe";
            break;
        case 5:
            gunAdi = "Cuma";
            break;
        case 6:
        case 7: // Birden fazla case aynı kodu çalıştırabilir
            gunAdi = "Hafta Sonu";
            break;
        default:
            gunAdi = "Geçersiz Gün";
    }
    console.log(gunAdi); // Çıktı: "Çarşamba"

2. Hata Yönetimi: try...catch...finally Blokları

Yazılım geliştirirken hatalarla karşılaşmak kaçınılmazdır. Kullanıcıların hatalı girişleri, ağ sorunları, beklenmeyen sunucu yanıtları gibi birçok durum programınızın çökmesine neden olabilir. try...catch blokları, bu tür hataları zarif bir şekilde yönetmenizi ve uygulamanızın kesintiye uğramadan çalışmaya devam etmesini sağlar.

  • try bloğu: Hata oluşma ihtimali olan kodları bu bloğun içine yazarsınız.
  • catch bloğu: try bloğu içinde bir hata meydana gelirse, kontrol hemen bu bloğa geçer. catch bloğu, hatayı yakalar ve hatayı temsil eden bir nesne (genellikle err veya error adında) alır. Bu sayede hataya özel işlemler yapabilir, kullanıcıya bilgilendirici mesajlar gösterebilir veya loglayabilirsiniz.
  • finally bloğu (İsteğe Bağlı): Hem try bloğu başarılı olsa da hem de bir hata yakalandığında, her durumda çalıştırılması gereken kodlar bu bloğa yazılır. Örneğin, açılan bir dosya bağlantısını kapatmak veya bir veritabanı bağlantısını sonlandırmak gibi temizlik işlemleri için idealdir.

    try {
        // Hata çıkarabilecek kod buraya yazılır
        let sayi1 = 10;
        let sayi2 = "abc";
        let sonuc = sayi1 / sayi2; // Bu satırda hata oluşacak (NaN)

        // Eğer yukarıdaki satırda kritik bir hata olursa, buraya ulaşılmaz
        console.log("İşlem başarılı: " + sonuc);

    } catch (hata) {
        // Hata oluşursa bu blok çalışır
        console.error("Bir hata oluştu: " + hata.message); // Hata mesajını yazdır
        // Hatanın türüne göre farklı işlemler yapabiliriz
        if (hata instanceof TypeError) {
            console.log("Tip hatası meydana geldi.");
        } else if (hata instanceof ReferenceError) {
            console.log("Tanımlanmamış değişkene erişim hatası.");
        } else {
            console.log("Beklenmedik bir hata.");
        }
    } finally {
        // Hata oluşsa da oluşmasa da bu blok her zaman çalışır
        console.log("İşlem tamamlandı, temizlik yapılıyor.");
    }

Yukarıdaki örnekte sayi1 / sayi2 işlemi NaN (Not-a-Number) sonucunu üretir, bu bir hata olarak kabul edilmez. Ancak, eğer sayi2 tanımlı olmasaydı veya başka bir türde daha ciddi bir hata olsaydı (örneğin throw ile fırlatılan bir hata), catch bloğu devreye girerdi.

Hata Fırlatma (throw)

Bazen kendi özel hatalarınızı oluşturmak veya belirli bir koşulun sağlanmaması durumunda program akışını kesmek isteyebilirsiniz. throw anahtar kelimesi ile kendi hatalarınızı fırlatabilirsiniz.


    function yasKontrol(yas) {
        if (yas < 0) {
            throw new Error("Yaş negatif olamaz!"); // Hata nesnesi fırlatıyoruz
        } else if (yas < 18) {
            throw "Yaşınız 18'den küçük!"; // Basit bir string de fırlatılabilir
        }
        return "Yaş uygun.";
    }

    try {
        console.log(yasKontrol(25)); // "Yaş uygun."
        // console.log(yasKontrol(-5)); // Hata fırlatır ve catch'e düşer
        console.log(yasKontrol(15)); // Hata fırlatır ve catch'e düşer
    } catch (err) {
        console.error("Hata yakalandı:", err);
        if (err.message === "Yaş negatif olamaz!") {
            alert("Lütfen geçerli bir yaş girin.");
        } else if (err === "Yaşınız 18'den küçük!") {
            alert("Maalesef yaşınız yetersiz.");
        }
    }

Sonuç

JavaScript'te karar ifadeleri (if/else, switch, ternary operatörü) ve hata yönetimi mekanizmaları (try...catch...finally), daha sağlam, esnek ve kullanıcı dostu uygulamalar geliştirmenizin anahtarıdır. Koşullara göre farklı davranışlar sergileyebilmek ve beklenmedik durumlarla başa çıkabilmek, profesyonel bir yazılımcının en önemli becerilerindendir.

Bu konuları pratik yaparak pekiştirmenizi şiddetle tavsiye ederim. Bol bol deneme yapın, farklı senaryoları düşünün ve kodunuzu hatalara karşı dayanıklı hale getirin!

Webkolog'u takipte kalın!

Hepinize hatasız ve başarılı kodlama deneyimleri dilerim!

0 yorum:

Yorum Gönder