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 vecatch
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
'ıncatch
yöntemi veyaasync/await
iletry...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
veReferenceError
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.