Decorator nedir?
- TypeScript kursu
- Orta seviye
- Ders 44/89
- 4 dk
Sınıf decorator'larının ne olduğunu öğrenirsin.
Decorator nedir?
Decorator, bir sınıfı, metodu veya özelliği işaretleyip değiştiren fonksiyondur. Sınıf decorator'u, sınıf bildirisinin hemen üstünde @Ad biçiminde yazılır ve constructor fonksiyonunu alır. Dönen değer (varsa) sınıfın yerine geçer.
@Logged
class Foo {
selam() { return "merhaba"; }
}Decorator higher-order fonksiyondur
Decorator, temelde bir higher-order fonksiyondur. @Logged class Foo {} yazımı, Foo sınıfını Logged fonksiyonuna geçirmeye eşdeğerdir. Decorator, constructor'ı alır ve onu olduğu gibi veya değiştirilmiş halde döndürür.
// @Logged class Foo {} eşdeğeri:
const Foo = Logged(class Foo {
selam() { return "merhaba"; }
});Uygulama Sınıf decorator'u yaz
Logged adında bir sınıf decorator'u yaz: ctor parametresi alsın, console.log ile "sınıf hazır" yazdırsın ve ctor'yu geri döndürsün. Foo sınıfını tanımla; selam metodu "merhaba" döndürsün. LoggedFoo değişkenine Logged'u Foo ile çağırarak decorator'u elle uygula. Elde edilen sınıfın yeni bir örneğinin selam metodunu çağır ve sonucu console.log ile yazdır.
Başlangıç kodu
// Logged fonksiyonunu yaz: ctor parametresi alsın
// "sınıf hazır" yazdır, ctor'yu döndür
// Foo sınıfını tanımla, selam metodu "merhaba" döndürsün
// LoggedFoo değişkenini Foo sınıfını Logged ile işleyerek oluştur
// yeni örnek üzerinden selam metodunu çağır, sonucu yazdırÖrnek çözüm
function Logged(ctor: any): any {
console.log("sınıf hazır");
return ctor;
}
class Foo {
selam(): string {
return "merhaba";
}
}
const LoggedFoo = Logged(Foo);
console.log(new LoggedFoo().selam());Beklenen çıktı
sınıf hazır merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir sınıf decorator'u kaç argüman alır ve bu argüman nedir?
- Constructor fonksiyonu (1 argüman) Doğru cevap
- Sınıfın bir örneği (1 argüman)
- Metot descriptor nesnesi (1 argüman)
- Özellik adı (1 argüman)
Açıklama: Sınıf decorator'u tek argüman alır: sınıfın constructor fonksiyonu. Örnek, metot descriptor'u ve özellik adı diğer decorator türlerinin argümanlarıdır.
2 Constructor'ı döndür
function Logged(ctor: any): any {
console.log("sınıf hazır");
return ____;
}
function Logged(ctor: any): any {
console.log("sınıf hazır");
return ctor;
}
Açıklama: Sınıf decorator'u, aldığı constructor'ı geri döndürmelidir. this bir fonksiyon içinde constructor'a eşit değildir; null sınıfı kaybeder; new ctor() bir örnek döndürür, constructor'u değil.
3 Sınıf decorator parçaları
| Kavram | Anlamı |
|---|---|
@Logged |
Decorator işareti ve adı |
class Foo |
İşaretlenen sınıf |
function Logged(ctor) |
Decorator fonksiyon tanımı |
return ctor |
Constructor'ı geri döndürme |