Web geliştirme serüveninize başlarken kod yazmanın heyecanı genellikle tarayıcı konsolunda beliren o korkutucu “kırmızı hata mesajları” ile kesintiye uğrar. Yeni başlayan birçok geliştirici hatalardan korkar; ancak yazılım dünyasında hatalar (bug’lar) kaçınılmazdır. En tecrübeli yazılımcılar bile her gün onlarca hatayla karşılaşır. Önemli olan hiç hata yapmamak değil; bu hataları ustaca kontrol altına alabilmek ve kaynağını bularak çözebilmektir.
JavaScript, esnek yapısı gereği bazen hataları sessizce geçiştirmeye çalışır, bazen de uygulamanızın tamamen çökmesine neden olur. Bu rehberde, yazdığınız kodda beklenmedik durumları nasıl yöneteceğinizi (Hata Yakalama / Error Handling) ve çalışmayan kodun neresinde sorun olduğunu profesyonelce nasıl tespit edeceğinizi (Hata Ayıklama / Debugging) bol örneklerle pekiştirerek öğreneceğiz.
1. JavaScript’te Hata (Error) Nedir?
JavaScript’te bir hata oluştuğunda, programın normal akışı durur ve sistem bir “Hata Nesnesi” (Error Object) fırlatır. Yeni başlayanların en sık karşılaştığı hata türlerinden bazıları şunlardır:
- SyntaxError (Sözdizimi Hatası): Kod yazım kurallarına uymadığınızda (örneğin bir parantezi veya noktalı virgülü unuttuğunuzda) ortaya çıkar.
- ReferenceError (Referans Hatası): Henüz tanımlanmamış veya kapsam (scope) dışında olan bir değişkene ulaşmaya çalıştığınızda fırlatılır.
- TypeError (Tür Hatası): Bir değer, beklenen türde olmadığında gerçekleşir (örneğin, bir metni fonksiyon gibi çağırmaya çalışmak veya
nullbir değerin özelliğini okumak).
Eğer bu hataları kodumuzda önceden öngörüp yakalamazsak, programımız çöker ve kullanıcı web sitemizde hiçbir işlem yapamaz hale gelir.
2. Hataları Zarafetle Karşılamak: try...catch Blokları
Dışarıdan gelen bir veriye, kullanıcının girdiği bir girdiye veya bir sunucu bağlantısına (API) bağımlı olan kodlar yazarken, kontrolünüz dışında şeyler ters gidebilir. JavaScript, uygulamanın çökmesini engellemek için kodunuzu güvenli bir alana almanızı sağlayan try...catch (dene…yakala) mekanizmasını sunar.
Nasıl Çalışır?
- try: Çalıştırılmasını istediğiniz, ancak hata üretme potansiyeli olan “riskli” kodları bu bloğa yazarsınız.
- catch: Eğer
trybloğu içindeki kodda bir hata meydana gelirse, program çökmez; bunun yerine derhalcatchbloğuna atlar. Bu blok, hatanın ne olduğunu (genellikleeveyaerrordeğişkeniyle) yakalar ve size hatayı yönetme şansı verir.
Örnek Kullanım:
try {
// Bilinçli olarak tanımlanmamış bir fonksiyonu çağırıyoruz
olmayanBirFonksiyon();
console.log("Bu satır asla çalışmayacak çünkü üstte hata oldu.");
} catch (e) {
// Hata yakalandığında burası çalışır
console.log("Bir hata yakalandı! Kullanıcıya belli etmeden çözüyoruz.");
console.log("Hata detayı: ", e.message);
}
Her Durumda Çalışan finally Bloğu Bazı durumlarda, kod hata verse de vermese de en sonda mutlaka çalışmasını istediğiniz “temizlik” işlemleri (örneğin ekrandaki ‘Yükleniyor…’ animasyonunu kapatmak) olabilir. Bunun için finally bloğu kullanılır. Hata olsa da, olmasa da finally bloğu en sonda kesinlikle çalıştırılır.
try {
console.log("Sunucuya bağlanmaya çalışılıyor...");
// riskli işlemler...
} catch (e) {
console.log("Bağlantı hatası!");
} finally {
console.log("Bağlantı denemesi sona erdi. (Hata olsa da olmasa da çalışır)");
}
3. Kendi Hatalarınızı Fırlatmak: throw
Sadece sistemin ürettiği hataları yakalamakla kalmaz, kendi iş mantığınıza uymayan durumlarda kendi özel hatalarınızı da oluşturabilirsiniz. Bunun için throw (fırlat) anahtar kelimesi kullanılır.
Kullanıcıdan yaşını girmesini beklediğiniz bir form düşünün. Kullanıcı sayı yerine harflerden oluşan bir metin girerse, bu durumu bir hata olarak fırlatıp catch bloğunda yakalayabiliriz.
function yasiKontrolEt(yas) {
try {
if (isNaN(yas)) {
// Yaş bir sayı değilse kendi hatamızı fırlatıyoruz
throw new TypeError("Girdiğiniz değer bir sayı değil!");
}
if (yas < 18) {
throw new Error("Bu siteye girmek için 18 yaşından büyük olmalısınız.");
}
console.log("Giriş başarılı, yaşınız: " + yas);
} catch (hata) {
// Fırlatılan tüm hatalar burada toplanır
console.error("HATA:", hata.message);
}
}
yasiKontrolEt("yirmi"); // Çıktı: HATA: Girdiğiniz değer bir sayı değil!
yasiKontrolEt(15); // Çıktı: HATA: Bu siteye girmek için 18 yaşından büyük olmalısınız.
yasiKontrolEt(25); // Çıktı: Giriş başarılı, yaşınız: 25
4. Hata Ayıklama (Debugging) Nedir ve Nasıl Yapılır?
Hata yakalama mekanizmalarını kurduk, ancak bazen kodumuz mantıksal olarak hata fırlatmaz ama ekranda beklediğimiz sonucu da vermez. Bir matematik işleminin sonucu 10 çıkması gerekirken 5 çıkıyordur. İşte bu gibi durumlarda, kodun içindeki “böcekleri” (bugs) bulma sanatına Debugging (Hata Ayıklama) denir.
A. Konsolu Kullanmak (console.log)
Yeni başlayanların en çok başvurduğu yöntem, kodun her adımına console.log() eklemektir. Kodun belirli bir satırında bir değişkenin içinin boş mu (undefined) dolu mu olduğunu anlamak için o değişkeni konsola yazdırırsınız.
function hesapla(fiyat, vergi) {
console.log("Gelen fiyat:", fiyat); // Fiyatın doğru gelip gelmediğini kontrol ederiz
let toplam = fiyat + vergi;
console.log("Hesaplanan Toplam:", toplam);
return toplam;
}
Bu yöntem işe yarar olsa da, büyük projelerde her yere console.log() yazıp sonra onları temizlemeye çalışmak oldukça yorucu ve amatörce bir yaklaşımdır.
B. Profesyonel Yaklaşım: Breakpoint (Kesme Noktası) Kullanımı
Daha profesyonel bir yol izlemek istiyorsanız, tarayıcıların (örneğin Google Chrome) Geliştirici Araçları (DevTools) içinde bulunan Breakpoints (Kesme Noktaları) özelliğini kullanmalısınız.
Kesme noktaları, uygulamanız çalışırken kodunuzu tam olarak belirlediğiniz bir satırda “dondurmanızı” (pause) sağlar. Program donduğunda, o anki tüm değişkenlerin içindeki değerleri görebilir ve kodu tek tek, adım adım (line by line) çalıştırarak hatanın nerede başladığını gözlerinizle görebilirsiniz.
Chrome’da Kesme Noktası (Breakpoint) Nasıl Kullanılır?
- Tarayıcınızda web sayfanız açıkken
F12tuşuna (veya sağ tıklayıp İncele/Inspect) basarak Geliştirici Araçları’nı açın. - Üstteki sekmelerden Sources (Kaynaklar) sekmesine tıklayın.
- Sol panelden JavaScript dosyanızı bulun ve açın.
- Kodunuzun duraklamasını istediğiniz satırın numarasının üzerine tıklayın. Orada mavi/kırmızı bir işaret (Breakpoint) belirecektir.
- Web sayfanızda o kodu tetikleyecek bir işlem yapın (örneğin bir butona tıklayın veya sayfayı yenileyin).
- Kod çalışırken tam o satıra geldiğinde ekran donacak ve “Paused in debugger” (Hata ayıklayıcıda duraklatıldı) yazısı çıkacaktır.
- Sağ taraftaki Scope (Kapsam) veya Variables (Değişkenler) paneline bakarak, o an kodunuzdaki tüm değişkenlerin değerlerini canlı olarak inceleyebilirsiniz.
- Yine sağ üstte bulunan (üzerinden atla/step over – F10) tuşlarını kullanarak kodunuzu satır satır ilerletebilirsiniz.
Bu yöntem, uygulamanın arka planında işlerin nasıl yürüdüğünü anlamak ve karmaşık hataları çözmek için en güçlü silahtır.
5. Daha Temiz ve Güvenli Kod İçin Katı Mod: "use strict";
JavaScript, hatalara karşı oldukça affedici bir dildir. Örneğin, let veya var kullanmadan bir değişken tanımlarsanız, JavaScript programı çökertmek yerine onu otomatik olarak “Global (Küresel)” bir değişkene çevirerek çalışmaya devam eder. Ancak bu esneklik, büyük projelerde felaketlere yol açabilir.
JavaScript’in bu aşırı affedici ve kuralsız davranışlarını kapatmak için dosyanızın veya fonksiyonunuzun en üstüne Strict Mode (Katı Mod) komutunu ekleyebilirsiniz.
"use strict";
function selamla() {
mesaj = "Merhaba Dünya!"; // HATA! let veya const kullanılmadı.
console.log(mesaj);
}
selamla();
Eğer "use strict"; kullanmasaydık bu kod sorunsuz çalışacaktı. Fakat katı mod devredeyken, let kullanmayı unuttuğumuz için JavaScript bize derhal bir ReferenceError (Referans Hatası) fırlatacak ve “mesaj tanımlanmadı” diyecektir. Katı modu kullanmak, modern JavaScript geliştirmenin (özellikle büyük framework’ler olan React, Vue veya Angular gibi yapılara geçerken) temel standartlarından biridir ve sizi fark edilmesi çok zor olan gizli hatalardan kurtarır.
Sonuç
JavaScript kodunuzun kalitesi, sadece ne kadar iyi özellikler yazdığınızla değil, aynı zamanda işler ters gittiğinde uygulamanızın buna nasıl tepki verdiğiyle de ölçülür. try...catch ve throw bloklarıyla kullanıcılarınıza daha pürüzsüz bir deneyim sunabilir; Chrome DevTools ve Breakpoints (Kesme Noktaları) gibi hata ayıklama (debugging) araçlarını kullanarak, saatlerce kod okuyarak bulamayacağınız hataları saniyeler içinde tespit edebilirsiniz. Kod yazarken hatalardan korkmayın, çünkü usta bir geliştirici olmanın yolu o hataları ayıklamaktan geçer! Bol bol pratik yaparak ve kodunuzu tarayıcı konsolunda dondurup inceleyerek bu konudaki ustalığınızı artırabilirsiniz.





