ProgramlamaFullstack geliştirici

Geri çağırma (callback) fonksiyonunu, isteğe bağlı olabilen veya varsayılan değerlere sahip olabilecek parametrelerle nasıl uygulayıp doğru şekilde tipleştirirsiniz? Ne gibi zorluklar ortaya çıkabilir ve bunlardan nasıl kaçınılabilir?

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

Cevap.

Sorunun Tarihi:

Callback fonksiyonları, JS ve TS'de asenkron programlama ve sorumluluğun delege edilmesi için yaygın bir uygulamadır. TypeScript'te bu tür fonksiyonların tiplenmesi, özellikle parametreler isteğe bağlıysa veya varsayılan değerlere sahipse güvenliği sağlamak için önemli bir parçadır.

Sorun:

Dinamik JS'de callback argümanlarının tiplenmemesi, değer iletiminde hatalara, undefined ile karışıklıklara ve parametre sıralaması hatalarına yol açar. TypeScript'te bu tür sorunlardan kaçınmak için tiplenme gereklidir, ancak dışarıda isteğe bağlılık, sıralama ve varsayılan değerlerle ilgili tüm incelikleri korumak zordur.

Çözüm:

Tüm parametrelerin tiplerini açıkça belirtmek, isteğe bağlı parametreleri soru işareti ile göstererek, varsayılan değerleri doğrudan fonksiyonun tanımında belirtmek ve bunları tipte doğru bir şekilde tanımlamayı unutmamak gerekir.

Kod örneği:

function fetchData( url: string, callback: (data: any, error?: Error) => void ) { // ... } // İsteğe bağlı error parametreli callback fetchData('/api', (data, error) => { if (error) { // işleme } else { // başarı } }); // Varsayılan parametreli callback function process( cb: (x: number, y?: number) => void = (x, y = 10) => { /* ... */ } ) { /* ... */ }

Anahtar Özellikler:

  • İsteğe bağlı parametreler için "?" işareti kullanılır.
  • Varsayılan değerler fonksiyon tanımında varsayılan değer belirtilerek tanımlanır.
  • Tipleme, kodun sürdürülebilirliğini artırır ve hata sayısını azaltır.

İkna Edici Sorular.

Callback tüketicisi, isteğe bağlı olanlar dahil tüm parametreleri açıkça dikkate almak zorunda mı?

Hayır, isteğe bağlı parametreleri atlayabilir ve TypeScript hata vermeyecektir — işleme, soru işareti sentaksı sayesinde doğru bir şekilde gerçekleşir.

Callback'de ilk parametreyi isteğe bağlı, ikinciyi zorunlu yapmak mümkün mü?

Hayır. İsteğe bağlı parametreler her zaman argümanlar listesinin sonunda olmalıdır. Sıralama ihlali, bir tip hata verecektir.

Bir parametre isteğe bağlı olarak belirtilmezse, ancak çağrıda iletilmezse ne olur?

TypeScript hata verir — eğer parametre zorunlu ise iletilmelidir. Yalnızca isteğe bağlı veya varsayılan değerlere sahip olanlar atlanabilir.

Tipik Hatalar ve Antipatternlar

  • İsteğe bağlı ve zorunlu parametrelerin sıralamasının ihlali (önce zorunlular, sonra isteğe bağlılar).
  • Tiplerin açıkça belirtilmemesi veya "any" kullanımı — TypeScript avantajlarının kaybına neden olur.
  • Değer yerine undefined iletmeye çalışmak ve varsayılanın çalışmasını beklemek (bu yalnızca argüman yoksa çalışır).

Gerçek Hayattan Örnek

Olumsuz Durum

Callback'teki ikinci argümanı zorunlu belirledik, ancak çağrıda iletmedik. Derleme hatası aldık.

Artılar:

  • Hızlı ve basit şekilde yazılmış kod, detaylandırma olmaksızın.

Eksiler:

  • Derlenmiyor.
  • Esneklik kaybı ve karışık sorumluluk.

Olumlu Durum

İsteğe bağlı parametreli callback'i şöyle tipledik:

(cb: (x: number, y?: number) => void)

veya varsayılanı belirttik:

f = (x: number, y = 10) => { ... }

Artılar:

  • Callback'lerin çağrılmasında hata garantisi.
  • Okunabilirlik ve sürdürülebilirlik.

Eksiler:

  • Parametre sıralamasına dikkat etmek gerekir.