CodeBlanks Logo Icon CodeBlanks

instanceof

instanceof ile sınıf daraltmayı öğrenirsin.

instanceof

instanceof operatörü, bir nesnenin belirli bir sınıfın (veya üst sınıfının) örneği olup olmadığını kontrol eder. if (animal instanceof Cat) koşulu prototip zincirini kontrol eder ve TypeScript'in türlü Cat'e daraltmasını sağlar. Sınıf tabanlı hiyerarşilerde daraltma için kullanılır.

class Cat { meow() {} }
class Dog { bark() {} }

function speak(animal: Cat | Dog) {
  if (animal instanceof Cat) {
    animal.meow();  // Cat
  } else {
    animal.bark();  // Dog
  }
}

Sınıf hiyerarşisi

instanceof yalnızca sınıflarla çalışır; interface'lerle kullanılamaz çünkü interface'lerin çalışma zamanı karşılığı yoktur. Bir sınıf hiyerarşisinde instanceof, alt sınıf örneklerini de üst sınıfın örneği olarak kabul eder.

class Animal {}
class Cat extends Animal { meow() {} }

const c: Animal = new Cat();
if (c instanceof Cat) {
  c.meow();  // Cat
}
// interface'lerle olmaz:
// if (c instanceof Pet) ...  // Pet bir interface ise hata

Uygulama instanceof ile sınıfları ayır

Cat (meow yöntemi) ve Dog (bark yöntemi) sınıflarını tanımla. speak(animal: Cat | Dog): string fonksiyonunu yaz. Eğer animal instanceof Cat ise "meow" döndür; değilse "bark" döndür. console.log(speak(new Cat())) ve console.log(speak(new Dog())) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Cat sınıfını (meow yöntemiyle) tanımla

// Dog sınıfını (bark yöntemiyle) tanımla

// speak(animal: Cat | Dog): string fonksiyonunu instanceof ile yaz

// speak(new Cat()) ve speak(new Dog()) sonuçlarını yazdır

Örnek çözüm

index.ts
class Cat {
  meow() {}
}

class Dog {
  bark() {}
}

function speak(animal: Cat | Dog): string {
  if (animal instanceof Cat) {
    return "meow";
  }
  return "bark";
}

console.log(speak(new Cat()));
console.log(speak(new Dog()));

Beklenen çıktı

meow
bark

Soru ve cevaplar

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

1 instanceof operatörü neyi kontrol eder?

  • İki değerin eşitliğini
  • Bir özelliğin varlığını
  • Değerin çalışma zamanı tür dizesini
  • Bir nesnenin prototip zincirini Doğru cevap

Açıklama: instanceof bir nesnenin prototip zincirini kontrol eder ve belirli bir sınıfın örneği olup olmadığını döner; bu bilgiyle TypeScript türlü daraltır.

2 instanceof ile sınıf kontrolü

Soru
class Cat { meow() {} }
class Dog { bark() {} }

function speak(a: Cat | Dog) {
  if (____) {
    a.meow();
  } else {
    a.bark();
  }
}
Cevap
class Cat { meow() {} }
class Dog { bark() {} }

function speak(a: Cat | Dog) {
  if (a instanceof Cat) {
    a.meow();
  } else {
    a.bark();
  }
}

Açıklama: instanceof Cat, a'nın Cat sınıfının örneği olup olmadığını prototip zinciriyle kontrol eder; koşul içinde a Cat'e daraltılır.

3 instanceof parçaları

Kavram Anlamı
instanceof prototip zincirini kontrol eder
instanceof Cat Cat sınıfına daraltır
Sınıf (class) instanceof ile kullanılabilir
Interface instanceof ile kullanılamaz

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