Programlama hataları kaçınılmazdır. Er ya da geç, uygulamanız bazı beklenmedik davranışlarla karşılaşacaktır. Diğer tüm programlama dillerinde olduğu gibi, JavaScript de kodunuzda bir şeyler ters gittiğinde hatalara neden olur.
Hatalar, bir uygulamanın normal akışını bozar. Ancak uygulamanızı öngörülemeyen davranışlardan korumaya da yardımcı olurlar. Hataların doğru bir şekilde nasıl ele alınacağını bilmek çok önemlidir.
Hata İşleme Neden Önemlidir?
Hata işleme, geliştirilmiş bir kullanıcı deneyimine katkıda bulunur. JavaScript’in varsayılan ve bazen ayrıntılı hatalarını, kendi insan tarafından daha okunabilir hata mesajlarıyla değiştirebilirsiniz. Bazı hataların nedenlerini incelikle halledebilir ve programınızı kapatmak yerine çalışır durumda tutabilirsiniz.
Hata işleme, geliştirme sırasında da yardımcı olur. Bir çalışma zamanı hatası yakalayabilir ve onunla tarayıcı konsolunda oturum açmak gibi yararlı bir şey yapabilirsiniz. Bu, çökmeye neden olan hatadan ve hatanın nerede ve neden oluştuğunu bilmemekten daha zariftir.
JavaScript Yerleşik Hatalarının Yapısı
JavaScript’in hataları, üç özelliğe sahip nesnelerdir:
name : Bu, hatanın adıdır. Örneğin, eksik bir değişken adı SyntaxError adında bir hata verir.
mesaj : Bu, mesajın gövdesidir ve hatayı metinsel olarak açıklar.
neden : Çağrı yığınını takip etmek için bu özelliği özel hatalarla kullanabilirsiniz.
JavaScript’te Yaygın Hata Türleri
İşte JavaScript’te bulunan bazı yaygın hatalar.
Sözdizimi hatası
JavaScript, kodunuzu yorumlamaya çalıştığında sözdizimi hataları oluşabilir. Kodunuz doğru sözdizimine uymuyorsa bir hata verir. Sözdizimi hatalarına neden olabilecek bazı yaygın hatalar şunlardır:
Eksik değişken adları.
Bir işlevden sonra “}” eksik.
Bir koşuldan sonra “)” eksik.
referans hatası
Başvuru hataları, bir program kullanılamayan veya kapsam dışında olan bir değişkene başvurmaya çalıştığında ortaya çıkar .
Yazım Hatası
JavaScript, beklediği tür aldığı türden farklı olduğu için bir işlemi gerçekleştiremediğinde tür hatası atabilir.
URI Hatası
Bu hata, decodeURIComponent() gibi bir genel URI işleme işlevini yanlış kullanırsanız oluşur. Sonuç olarak, kodlama veya kod çözme başarısız olur.
toplama hatası
Bu hata, birden çok hatayı bir hataya sarmalamak için kullanılır. Aynı anda birçok hata atmak istediğinizde kullanın. Örneğin, Promise.any() kendisine iletilen tüm vaatler reddedildiğinde bir AggregateError() atabilir.
İç hata
JavaScript motorunun içinde bir hata oluştuğunda bir InternalError atılır.
Menzil Hatası
Bazı işlevler, argüman olarak iletebileceğiniz değer aralığını belirler. Bu hata, o aralıkta yer almayan bir değeri iletmeye çalıştığınızda oluşur.
Try…Catch Bloğuyla Hata İşleme
JavaScript, try…catch…finally bloğuyla yerleşik istisna işleme işlevi sağlar . Ayrıca, throw operatörünü kullanarak kendi hatalarınızı yükseltmenize olanak tanır .
Çalışma zamanı sırasında oluşan hataları işlemek için bir try…catch bloğu kullanabilirsiniz. try bloğunda doğru şekilde yürütülmesini beklediğiniz geçerli bir kod yazarsınız. catch bloğunda hata işleme kodu yazabilirsiniz.
try {
// Valid Javascript code
} catch (error) {
// Handle error
} finally {
// Executed even when an error occurs
}
try bloğundaki kod herhangi bir hataya neden olmazsa catch bloğu yoksayılır. Bir hataya neden olursa, yürütme catch bloğuna atlar. Nihayet bloğundaki kod, bir hata oluşsa da oluşmasa da çalışır. Bu blok zorunlu değildir, bu nedenle ihtiyacınız yoksa atlayın.
try bloğuna eklediğiniz kod geçerli olmalıdır. Değilse, JavaScript bir ayrıştırma hatası atar.
Pratik bir örneğe bakalım:
try {
console.log(text)
} catch (error) {
console.log(error.message)
} finally {
console.log(“Will be executed regardless”)
}
Bu program, metin değişkeninin değerini günlüğe kaydetmeye çalışır. Bu değişken tanımlı olmadığı için program hata verecektir. Bu hata, catch bloğunda konsolda yazdırılır. Nihayet blok çalışır ve kendi mesajını yazdırır.
ReferenceError: text is not defined
Will be executed regardless
Kendi hatanızı yükseltmeniz gereken durumlarda, fırlatma operatörünü kullanın.
Veriler yanlışsa hata veren bu örneği göz önünde bulundurun:
const data = getData()
try {
if (!data) {
throw “No data”
}
console.log(data)
// continue
} catch(error) {
console.log(error) // “No data”
}
Bu örnekte, program getData() işlevini çağırır ve sonucunu data değişkenine atar. try bloğunda, veri boşsa blok özel bir hata atar. Catch bloğu bu hatayı yakalar ve konsola kaydeder.
Geliştirme sırasında hata atmak çok faydalıdır. Uygulamanızın neden beklendiği gibi çalışmadığını anlamak için özel hata mesajını kullanabilirsiniz.
Bu örneğin gösterdiği gibi, hata nesnesi için bir dize kullanabilirsiniz. Aslında herhangi bir JavaScript ifadesini hata olarak atabilirsiniz. Ancak, yerleşik hatalarla tutarlılık adına, ad ve mesaj içeren bir JavaScript nesnesi kullanın.
throw {
name: “Error name”,
message: “Error message”
}
Hata atarken JavaScript’in yerleşik oluşturucularını da kullanabilirsiniz. Bu yapıcılar, diğerlerinin yanı sıra Error, SyntaxError ve ReferenceError’u içerir.
Error yapıcısını kullanarak bir hata atmak için şu kodu kullanın:
throw new Error(“No data”)
Artık isme ve mesaja başvurabilirsiniz.
console.log(error.name) // Error
console.log(error.message) // No data
JavaScript Hata Nesnesini Genişletme
JavaScript tarafından zaten sağlanan nesnelere karşılık gelmeyen hataları işlerken özel bir hata sınıfı kullanışlı olur. Örneğin, bir veri doğrulama hatasını ValidationError adlı belirli bir tür olarak izole etmek isteyebilirsiniz.
Özel bir hata sınıfı oluşturmak için JavaScript ES2015 sınıfını kullanabilirsiniz .
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = “ValidationError”;
}
}
ValidationError sınıfını şu şekilde kullanarak bir hata atın:
throw new ValidationError(“Your error message”)
Fırlatılan hata, adı ve mesaj değerleri olan bir nesne olacaktır.
{
name: “ValidationError”,
message: “Your error message”
}
Hatalar Yardımcı Olmak İçin Var
Hangi dili kullanırsanız kullanın, hata işleme programlamanın temel bir parçasıdır. JavaScript, istisnalar tarzında hataları yükseltmek ve yakalamak için büyük desteğe sahiptir. Ayrıca, kendi durumlarınız için işleyebileceğiniz ve kullanabileceğiniz birkaç yerleşik hata türüne de sahiptir.
JavaScript’i “özensiz modda” yazarken, sözdizimi hataları gibi bazı hatalar fark edilmeyebilir. Katı modun kullanılması, JavaScript’in aksi takdirde yok sayacağı hataları yakalamasına olanak tanır.