Hatalar & Debugging
Hatalar & Debugging: TypeError → Optional Chain ile Düzeltme Hatalar korkutucu değildir! Kırmızı hata mesajını, arabanın gösterge panelindeki uyarı ışığı gibi düşün: ışık arızanı
TypeError → Optional Chain ile Düzeltme
Hatalar korkutucu değildir! Kırmızı hata mesajını, arabanın gösterge panelindeki uyarı ışığı gibi düşün: ışık arızanın kendisi değildir, sana kaputun altında nereye bakacağını söyleyen şeydir. `TypeError: Cannot read property 'text' of null` mesajı 'kod bozuk' demez; 'aradığın element sayfada yoktu' der. Peki madem mesaj bu kadar yardımcı, neden bu kadar çok kişi hatayı `try-catch` ile sarıp geçmeyi tercih ediyor? Çünkü hatayı susturmak, çözmekten kısa vadede daha kolaydır — ve testlerde bunun bedeli ağırdır: boş bir `catch` bloğu, kırılması GEREKEN bir testi yeşil gösterir. Java'da `catch (Exception e) {}` yazmanın neden kötü sayıldığını biliyorsun; JavaScript'te aynı kural, üstüne bir de asenkron tuzağıyla geçerlidir — `await` olmadan çağrılan bir asenkron fonksiyonun hatasını `try-catch` HİÇ yakalayamaz, hata sessizce kaybolur. QA açısından kural nettir: hatayı yalnızca ne yapacağını biliyorsan yakala, bilmiyorsan bırak patlasın — patlayan test, sessizce geçen testten çok daha ucuzdur. Şimdi en sık karşılaşılan JavaScript hatalarını ve `try-catch` bloklarını nasıl kullanacağımızı öğrenelim.
const ile tanımlanmış bir değişkene yeni bir değer atamaya çalıştığınızda oluşur.
Değişkenin değerinin değişmesi gerekiyorsa let ile tanımlayın.
Tanımlanmamış veya o anki kapsamda (scope) bulunmayan bir değişkene erişilmeye çalışıldığında oluşur.
Değişkenin adını kontrol edin ve let/const ile tanımlandığından emin olun.
Bulunamayan veya tanımsız (undefined) bir elemanın üzerinden fonksiyon çağrıldığında oluşur (Java'daki NullPointerException).
Elementi bulup bulamadığınızı (örneğin locator'ın geçerliliğini ve bekleme süresini) kontrol edin.
JSON.parse() ile HTML içeriğini parse etmeye çalışıldığında oluşur. API 404 veya hata sayfası döndürdüğünde JSON yerine HTML gelir.
`response.ok` kontrolü ekleyin. `Content-Type: application/json` header'ını doğrulayın, ardından parse edin.
Fonksiyon olmayan bir değer (sayı, string, undefined) üzerinde parantezle çağrı yapıldığında oluşur.
`typeof myFn === 'function'` koruması ekleyin veya değişken adının doğru yazıldığını kontrol edin.
Sonsuz özyineleme (infinite recursion) sonucunda çağrı yığını (call stack) taşar. Java'daki StackOverflowError'ın birebir karşılığıdır.
Rekürsif fonksiyona doğru bir taban koşulu (base case) ekleyin veya döngüye (iterative loop) çevirin.