JavaScript'te Hata Yönetimi

JavaScript'te Hata Yönetimi

Bu makale, JavaScript'te hata yönetimini açıklar.

YouTube Video

JavaScript'te Hata Yönetimi

JavaScript'te hata yönetimi, bir program beklenmedik sorunlarla karşılaştığında hataları yakalamak ve uygun şekilde işlemek için önemli bir özelliktir. Genellikle, hataları yakalamak ve yönetmek için try...catch sözdizimi kullanılır. Ek olarak, Promises veya asenkron işlemlerle çalışırken hata yönetimi, async/await veya Promise.prototype.catch kullanılarak da yapılabilir.

try...catch Sözdizimi

try...catch, bir kod bloğu içinde hata oluştuğunda bu hataları yakalamak ve yönetmek için kullanılır.

 1try {
 2    // Code that may throw an error
 3    let result = riskyFunction();
 4    console.log(result);
 5} catch (error) {
 6    // Catch and handle the error
 7    console.error("An error occurred:", error.message);
 8} finally {
 9    // Code that will always execute
10    console.log("Error handling has completed.");
11}
  • Eğer bir hata try bloğu içinde meydana gelirse, programın yürütülmesi kesilir ve catch bloğu çalıştırılır.
  • Hata olup olmadığına bakılmaksızın finally bloğu her zaman çalıştırılır. Kaynakları serbest bırakmak ve son işlemler gibi işler için kullanışlıdır.

Hata Fırlatma (throw)

JavaScript'te, throw anahtar kelimesini kullanarak açıkça bir hata tetikleyebilirsiniz. Özel hata mesajları veya özel hatalar fırlatmak için kullanılır.

 1function checkAge(age) {
 2    if (age < 18) {
 3        throw new Error("You are under 18 years old.");
 4    }
 5    return "Age verification completed.";
 6}
 7
 8try {
 9    let result = checkAge(15);
10    console.log(result);
11} catch (error) {
12    console.error(error.message);  // Displays "You are under 18 years old."
13}

Asenkron İşlemlerde Hata Yönetimi (Promise ve async/await)

Asenkron işlemler gerçekleştirilirken, hata yönetimi biraz farklıdır. Promises kullanırken, hatalar catch yöntemiyle yakalanır.

1let promise = new Promise((resolve, reject) => {
2    // Asynchronous operation
3    setTimeout(() => reject(new Error("An issue has occurred!")), 1000);
4});
5
6promise
7    .then(result => console.log(result))
8    .catch(error => console.error(error.message));  // Displays "An issue has occurred!"

async/await kullanarak asenkron işlemler gerçekleştirirken, hataları try...catch ile yönetebilirsiniz.

 1async function fetchData() {
 2    try {
 3        let response = await fetch('https://api.example.com/data');
 4        let data = await response.json();
 5        console.log(data);
 6    } catch (error) {
 7        console.error("An error occurred while fetching data:", error.message);
 8    }
 9}
10
11fetchData();

Özet

  • Eşzamanlı hataları try...catch sözdizimi kullanarak yakalayabilirsiniz.
  • throw kullanarak kendi hatalarınızı fırlatabilirsiniz.
  • Asenkron işlemlerdeki hatalar, Promise'ın catch yöntemi veya async/await ile try...catch kullanılarak yönetilebilir.

Bu yöntemleri kullanarak, hatalar oluştuğunda bile programınızın doğru çalışmasını sağlayabilirsiniz.

Error

Error sınıfı, hata yönetimi için kullanılır. Hatalar oluşturmak, hata mesajları ve hata yığın izleri sağlamak için olanak tanır.

1try {
2    throw new Error("Something went wrong");
3} catch (e) {
4    console.log(e.message); // Something went wrong
5}

Temel Kullanım

Bir hata oluştuğunda, açıkça bir Error nesnesi oluşturulabilir. new Error() kullanarak bir örnek oluşturur ve bir hata mesajı iletirsiniz.

1const error = new Error("Something went wrong");
2console.log(error.message);  // "Something went wrong"
3console.log(error.name);     // "Error"
4console.log(error.stack);    // Stack trace (information about where the error occurred)

throw ile Hata Atmak

JavaScript'te, throw anahtar kelimesini kullanarak bir hata fırlatabilirsiniz. Bu, belirli durumlarda işlemi kesmek ve kontrolü bir hata işleyicisine aktarmak için kullanılır.

1function doSomething() {
2    throw new Error("This function is not yet implemented");
3}
4
5try {
6    doSomething();
7} catch (e) {
8    console.error(e.message);  // "This function is not yet implemented"
9}

throw ile atılan hatalar, try...catch söz dizimi ile yakalanabilir.

Özel Hatalar Oluşturma

JavaScript'te, Error sınıfını genişleterek kendi özel hatalarınızı oluşturabilirsiniz. Bu, belirli durumlara uygun hatalar oluşturmanızı sağlar.

 1class CustomError extends Error {
 2    constructor(message) {
 3        super(message);  // Call the parent class constructor
 4        this.name = "CustomError";  // Set the error name
 5    }
 6}
 7
 8try {
 9    throw new CustomError("A custom error has occurred");
10} catch (e) {
11    console.error(e.name);    // "CustomError"
12    console.error(e.message); // "A custom error has occurred"
13}

Yerleşik Hata Sınıfları

JavaScript, Error sınıfını genişleten birkaç yerleşik hata sınıfına sahiptir. Bunlar, belirli hataları temsil etmek için kullanılır.

  • ReferenceError: Var olmayan bir değişkene başvurulduğunda oluşur.
  • TypeError: Bir değerin türü beklenen türden farklı olduğunda oluşur.
  • RangeError: Bir sayı izin verilen aralığın dışındayken oluşur.
  • SyntaxError: Söz dizimi açısından doğru olmayan kod çalıştırıldığında oluşur.
  • EvalError: eval() fonksiyonunun kullanımına bağlı hatalar. Günümüzde nadiren kullanılır.
  • URIError: Geçersiz bir URI kullanıldığında (kodlama veya kod çözme hataları) oluşur.
Örnek: ReferenceError

Bir ReferenceError örneği aşağıda verilmiştir.

1try {
2    console.log(undefinedVariable);  // Undefined variable
3} catch (e) {
4    console.error(e.name);    // "ReferenceError"
5    console.error(e.message); // "undefinedVariable is not defined"
6}
Örnek: TypeError

Bir TypeError örneği aşağıda verilmiştir.

1try {
2    null.f();  // Attempting to call a function on null
3} catch (e) {
4    console.error(e.name);    // "TypeError"
5    console.error(e.message); // "Cannot read properties of null (reading 'f')"
6}

finally Bloğu

try...catch söz diziminde, bir hata oluşup oluşmadığına bakılmaksızın yürütmek istediğiniz işlemler için finally bloğunu kullanın.

1try {
2    throw new Error("An issue has occurred");
3} catch (e) {
4    console.error(e.message);  // "An issue has occurred"
5} finally {
6    console.log("Performing cleanup");
7}

Bu örnekte, bir hata atılsa bile finally bloğundaki işlemler gerçekleştirilir.

Error Nesnesinin Özellikleri

Error nesnesinin şu özellikleri vardır.

  • message: Bu hata mesajıdır.
  • name: Varsayılan olarak "Error" olan hatanın adı.
  • stack: Hatanın meydana geldiği yeri içeren bir yığın izi, hata ayıklama için faydalıdır.

İstisna Yönetiminin Faydaları

Hata yönetimini doğru bir şekilde uygulayarak beklenmedik bir davranış olduğunda uygulamanın çökmemesini sağlayabilirsiniz. try...catch söz dizimini ve hata nesnelerini uygun şekilde kullanarak daha sağlam kod yazabilirsiniz.

 1function divide(a, b) {
 2    if (b === 0) {
 3        throw new Error("Cannot divide by zero");
 4    }
 5    return a / b;
 6}
 7
 8try {
 9    console.log(divide(4, 0));  // An error will occur
10} catch (e) {
11    console.error(e.message);   // "Cannot divide by zero"
12}

Özet

  • Error sınıfı, bir hatanın nedenini ifade etmek ve hata yönetimini gerçekleştirmek için kullanılır.
  • Hataları yönetmek ve beklenmedik uygulama sonlanmalarını önlemek için try...catch...finally söz dizimini kullanın.
  • Özel hatalar oluşturmak için Error sınıfını genişletmek de mümkündür.
  • TypeError ve ReferenceError gibi yerleşik hata sınıflarını kullanarak çeşitli hata türlerini yönetebilirsiniz.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video