CodeBlanks Logo Icon CodeBlanks

Özet - Strict null

Strict null ile güvenli bir konfigürasyon yükleyici yazarsın.

Özet - Strict null

Strict null, definite assignment ve non-null assertion birlikte kullanılarak güvenli bir konfigürasyon yükleyici yazılır. strictNullChecks null değerleri yakalar; definite assignment geç başlayan atamalarda ! kullanır; non-null assertion değer null olmadığından emin olunan yerlerde ! ile daraltır.

class Config {
  host!: string;
  port!: number;

  load(env: { HOST: string | null; PORT: string | null }): void {
    this.host = env.HOST!;
    this.port = Number(env.PORT!);
  }
}

Uygulama Konfigürasyon yükleyici yaz

Config sınıfını tanımla: host!: string ve port!: number definite assignment özellikleriyle. load(env: { HOST: string | null; PORT: string | null }): void yöntemi yaz: this.host = env.HOST! ve this.port = Number(env.PORT!) ata. Bir Config örneği oluştur, c.load({ HOST: "localhost", PORT: "8080" }) çağır, sonra console.log(c.host) ve console.log(c.port) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Config sınıfını tanımla (host ve port definite assignment ile)

// load yöntemi yaz (env parametresiyle, non-null assertion kullan)

// Config örneği oluştur, load çağır, sonuçları yazdır

Örnek çözüm

index.ts
class Config {
  host!: string;
  port!: number;

  load(env: { HOST: string | null; PORT: string | null }): void {
    this.host = env.HOST!;
    this.port = Number(env.PORT!);
  }
}

const c = new Config();
c.load({ HOST: "localhost", PORT: "8080" });
console.log(c.host);
console.log(c.port);

Beklenen çıktı

localhost
8080

Soru ve cevaplar

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

1 Definite assignment (!) ile non-null assertion (!) arasındaki fark nedir?

  • Non-null assertion çalışma zamanı kontrolü yapar
  • İkisi de aynıdır
  • Definite assignment özellik bildiriminde, non-null assertion ifadede kullanılır Doğru cevap
  • Definite assignment yalnızca sınıflarda kullanılır

Açıklama: Definite assignment, sınıf özellik bildiriminde ! ile özelliğin sonra atanacağını söyler; non-null assertion ise ifadeden sonra ! ile değerin null olmadığını assertion yapar.

2 Config host ata

Soru
class Config {
  host!: string;
  port!: number;

  load(env: { HOST: string | null; PORT: string | null }): void {
    this.host = ____;
    this.port = Number(env.PORT!);
  }
}
Cevap
class Config {
  host!: string;
  port!: number;

  load(env: { HOST: string | null; PORT: string | null }): void {
    this.host = env.HOST!;
    this.port = Number(env.PORT!);
  }
}

Açıklama: env.HOST! ifadesi non-null assertion yapar; HOST null olabilir ama assertion ile string'e daraltılır ve host özelliğine atanır.

3 Strict null özet eşleştirmesi

Kavram Anlamı
strictNullChecks null ve undefined'ı diğer türlerden ayırır
definite assignment (!) özellik bildiriminde
non-null assertion (!) ifadede
akış analizi if koşulunda daraltma

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