ProgramlamaFrontend geliştirici

TypeScript'te işlev aşırı yüklemesini (function overloading) nasıl uygulayabiliriz ve aşırı yükleme C# veya Java gibi diğer dillerden nasıl farklılık gösterir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

TypeScript'te işlev aşırı yüklemesi, farklı türlerde ve/veya argüman sayılarında birden fazla işlev imzasının bildirilmesi ile elde edilir, ancak yalnızca bir uygulama ile.

Temel özellik: uygulama her zaman bir tanedir, ve derleyici çağrının bildirilen imzalardan birine uyup uymadığını kontrol eder.

Örnek:

function greet(person: string): string; function greet(person: string, age: number): string; function greet(person: string, age?: number): string { if (age !== undefined) { return `Hello, ${person}. You are ${age}!`; } else { return `Hello, ${person}!`; } } greet('Alice'); // 'Hello, Alice!' greet('Bob', 32); // 'Hello, Bob. You are 32!'

⚠️ C# veya Java'dan farklı olarak, birden fazla işlev uygulaması yoktur — tüm imzalar tek bir işlevle çözülür ve içeride zorunlu bir kontrol yapılır.

Kandırmaca Soru

TypeScript'te her bir aşırı yüklenmiş imzayı ayrı bir işlev olarak uygulamak gerekiyor mu, C#'deki gibi?

Cevap: Hayır! TypeScript'te aşırı yüklenen işlev için yalnızca bir uygulama vardır. Tüm varyasyonlar, bir dizi imza bildirimi ile tanımlanır. Uygulama, bir işlev içinde farklı giriş parametrelerini işlemek zorundadır.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri


Hikaye

Bir projede, geliştirici aşırı yüklemeden yararlanmayı umarak, aynı isme sahip iki işlev tanımladı. Sonuç olarak, yalnızca son tanımlanan işlev çalıştı ve diğerleri "silindi". Bu, beklenmedik hatalara ve büyük yeniden yapılandırma sürelerine yol açtı.


Hikaye

Aşırı yüklenmiş işlevin uygulaması içinde türlerin doğru kontrolünü sağlamadılar. İşlev, müşterilerin beklediği türde olmayan değerler döndürmeye başladı; bu, TypeScript’in aşırı yüklemelerin uygulamasını doğrulamadığı için hata ayıklama zorluğuna yol açtı.


Hikaye

Yalnızca türler seviyesinde aşırı yükleme uygulaması yaptılar (imzaları tanımladılar), ancak çalışma zamanı uygulamasıyla uyumluluğu sağlamadılar (isteğe bağlı parametrelerin ve işlev içi işlemlerin eksikliği). Bu, "türe göre geçerli" parametrelerle çağrıldığında çöküşlere yol açtı çünkü çalışma zamanı bu seçenekleri desteklemiyordu.