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
trybloğu içinde meydana gelirse, programın yürütülmesi kesilir vecatchbloğu çalıştırılır. - Hata olup olmadığına bakılmaksızın
finallybloğ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...catchsözdizimi kullanarak yakalayabilirsiniz. throwkullanarak kendi hatalarınızı fırlatabilirsiniz.- Asenkron işlemlerdeki hatalar,
Promise'ıncatchyöntemi veyaasync/awaitiletry...catchkullanı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"
4
5// Stack trace (information about where the error occurred)
6console.log(error.stack);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.
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.
İ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
Errorsı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...finallysöz dizimini kullanın. - Özel hatalar oluşturmak için
Errorsınıfını genişletmek de mümkündür. TypeErrorveReferenceErrorgibi 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.