TypeScript Hata İşleme Başlangıç Kılavuzu
Etkili hata işleme her programlama dilinde çok önemlidir ve TypeScript de bir istisna değildir. Uygun hata işleme, beklenmeyen koşulları zarif bir şekilde yöneterek sağlam ve güvenilir uygulamalar oluşturmaya yardımcı olur. Bu kılavuz, TypeScript'te hata işlemenin temellerini ele alacak ve yeni başlayanlar için pratik örnekler sağlayacaktır.
TypeScript'teki Hataları Anlama
TypeScript'teki hatalar, JavaScript'te olduğu gibi, çalışma zamanı veya derleme zamanı sırasında meydana gelir. TypeScript, derleme zamanında birçok olası sorunu yakalayabilen tür güvenliği sağlar, ancak çalışma zamanı hatalarının yine de düzgün bir şekilde yönetilmesi gerekir.
try
ve catch ile Temel Hata İşleme
TypeScript'te, try
ve catch
bloklarını kullanarak çalışma zamanı hatalarını işlersiniz. Bu yaklaşım, bir hata fırlatabilecek kodu yürütmenize ve bu hata oluştuğunda onu işlemenize olanak tanır.
try
ve catch örneği
function divide(a: number, b: number): number {
try {
if (b === 0) {
throw new Error("Cannot divide by zero");
}
return a / b;
} catch (error) {
console.error(error.message);
return NaN; // Return NaN to indicate an error
}
}
console.log(divide(10, 2)); // Output: 5
console.log(divide(10, 0)); // Output: Cannot divide by zero
Bu örnekte, divide
fonksiyonu iki sayıyı bölmeye çalışır. Eğer bölen sıfırsa, bir hata atılır ve bir hata mesajı kaydeden catch
bloğu tarafından yakalanır.
Özel Hata Türleri
TypeScript, belirli hata koşullarını daha iyi temsil etmek için özel hata türleri tanımlamanıza olanak tanır. Özel hata türleri, hataları kategorize etmeye ve bunları daha etkili bir şekilde işlemeye yardımcı olur.
Özel Bir Hata Türü Oluşturma
class DivisionError extends Error {
constructor(message: string) {
super(message);
this.name = "DivisionError";
}
}
function divide(a: number, b: number): number {
try {
if (b === 0) {
throw new DivisionError("Cannot divide by zero");
}
return a / b;
} catch (error) {
if (error instanceof DivisionError) {
console.error(`Custom Error: ${error.message}`);
} else {
console.error("An unexpected error occurred");
}
return NaN; // Return NaN to indicate an error
}
}
console.log(divide(10, 2)); // Output: 5
console.log(divide(10, 0)); // Output: Custom Error: Cannot divide by zero
Burada, yerleşik Error
sınıfını genişleten özel bir hata sınıfı DivisionError
tanımlıyoruz. Daha özel hata işleme sağlamak için bu özel hatayı divide
işlevinde kullanıyoruz.
instanceof ile Tip Koruma
instanceof
gibi tür koruyucuları, catch
bloğundaki bir hata nesnesinin türünü daraltmaya yardımcı olur ve böylece farklı hata türlerini farklı şekilde ele almanızı sağlar.
Tip Koruma Örneği
function processInput(input: string | number) {
try {
if (typeof input === "string") {
console.log(input.toUpperCase());
} else {
throw new Error("Input must be a string");
}
} catch (error) {
if (error instanceof Error) {
console.error(`Error: ${error.message}`);
} else {
console.error("An unknown error occurred");
}
}
}
processInput("hello"); // Output: HELLO
processInput(42); // Output: Error: Input must be a string
Bu örnek, hata nesnesinin Error
örneği olduğundan emin olmak için catch
bloğunda tür korumasını gösterir ve böylece doğru hata işleme olanağı sağlar.
Temizleme için finally
kullanımı
finally
bloğu, bir hata oluşup oluşmadığına bakılmaksızın çalışması gereken kodu yürütmek için kullanılabilir. Bu, dosyaları kapatma veya kaynakları serbest bırakma gibi temizleme işlemleri için yararlıdır.
finally ile örnek
function readFile(filePath: string): string {
try {
// Simulate reading a file
if (filePath === "") {
throw new Error("File path cannot be empty");
}
return "File content";
} catch (error) {
console.error(`Error: ${error.message}`);
return "";
} finally {
console.log("Cleanup: Closing file");
}
}
console.log(readFile("path/to/file")); // Output: File content
console.log(readFile("")); // Output: Error: File path cannot be empty
// Cleanup: Closing file
Bu örnekte, finally
bloğu, bir hata oluşup oluşmadığına bakılmaksızın bir temizleme mesajının günlüğe kaydedilmesini sağlar.
Çözüm
Güvenilir TypeScript uygulamaları oluşturmak için etkili hata işleme çok önemlidir. try
ve catch
, özel hata türleri, tür koruma ve finally
kullanarak hataları daha etkili bir şekilde yönetebilir ve uygulamanızın beklenmeyen koşullar karşısında bile öngörülebilir şekilde davranmasını sağlayabilirsiniz.
Bu tekniklerle hataları zarif bir şekilde ele alabilir ve TypeScript kodunuzun sağlamlığını artırabilirsiniz. TypeScript hata işleme konusunda uzmanlaşmak ve daha dayanıklı uygulamalar yazmak için bu kavramları uygulayın.