CodeBlanks Logo Icon CodeBlanks

Assertion vs throw

Assertion ile hata fırlatma farkını öğrenirsin.

Assertion vs throw

Assertion function ile manuel throw arasındaki fark, assertion function'ın tip düzeyinde daraltma yapmasıdır. if (!x) throw new Error() manuel olarak da daraltır ama assertion function bu mantığı yeniden kullanılabilir hale getirir ve çağrıyı tek satırda yapar.

// Manuel throw ile daraltma
function manual(v: unknown): string {
  if (typeof v !== "string") throw new Error("not string");
  return v.toUpperCase();
}

// Assertion function ile daraltma
function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") throw new Error("not string");
}

function withAssert(v: unknown): string {
  assertString(v);
  return v.toUpperCase();
}

Yeniden kullanılabilirlik

Birden fazla yerde aynı doğrulama gerekli olduğunda, assertion function tanımlamak tekrarı önler. her çağrı noktasında if (...) throw ... yazmak yerine tek bir fonksiyon çağrılır; hata mesajı ve kontrol tek yerde tutulur.

function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") throw new Error("not string");
}

// Yeniden kullanılır:
function upper(v: unknown): string {
  assertString(v);
  return v.toUpperCase();
}

function lower(v: unknown): string {
  assertString(v);
  return v.toLowerCase();
}

Uygulama Assertion ile temiz daraltma

assertString(x: unknown): asserts x is string fonksiyonunu tanımla (typeof x !== "string" ise throw new Error("not string")). upper(v: unknown): string fonksiyonunu yaz: assertString(v) çağır, sonra v.toUpperCase() döndür. lower(v: unknown): string fonksiyonunu yaz: assertString(v) çağır, sonra v.toLowerCase() döndür. console.log(upper("hello")) ve console.log(lower("WORLD")) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// assertString fonksiyonunu tanımla (asserts x is string, throw ile)

// upper fonksiyonunu assertString ile yaz

// lower fonksiyonunu assertString ile yaz

// upper("hello") ve lower("WORLD") sonuçlarını yazdır

Örnek çözüm

index.ts
function assertString(x: unknown): asserts x is string {
  if (typeof x !== "string") {
    throw new Error("not string");
  }
}

function upper(v: unknown): string {
  assertString(v);
  return v.toUpperCase();
}

function lower(v: unknown): string {
  assertString(v);
  return v.toLowerCase();
}

console.log(upper("hello"));
console.log(lower("WORLD"));

Beklenen çıktı

HELLO
world

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Assertion function manuel throw'a göre ne avantaj sağlar?

  • Çalışma zamanında daha hızlıdır
  • Hata fırlatmaz
  • Daraltma mantığını yeniden kullanılabilir kılar Doğru cevap
  • Tüm türleri any yapar

Açıklama: Assertion function, throw ve daraltma mantığını tek bir yeniden kullanılabilir fonksiyona kapsüller; her çağrı noktasında if-throw yazmak yerine tek satır çağrı yeter.

2 Manuel throw yerine assertion

Soru
function process(v: unknown): string {
  assertString(v);
  return ____;
}
Cevap
function process(v: unknown): string {
  assertString(v);
  return v.toUpperCase();
}

Açıklama: assertString(v) çağrısından sonra v string'e daraltıldığı için v.toUpperCase() doğrudan yazılabilir; tekrar kontrol veya cast gerekmez.

3 Assertion vs throw parçaları

Kavram Anlamı
if (!x) throw ... manuel daraltma
assertString(v) yeniden kullanılabilir daraltma
asserts x is T tip düzeyinde daraltma
throw new Error çalışma zamanı durdurma

İleri seviye bölümündeki tüm dersler