Duck Typing nədir? JavaScript-də tətbiqi və nümunələrlə izah
-
Proqramlaşdırmada
Duck Typing — tip yoxlamasının obyektin davranışına əsasən aparılması prinsipidir. Bu ifadə məşhur bir sitatdan götürülüb:
“Əgər nəsə ördək kimi gəzir, ördək kimi səs çıxarırsa, deməli bu ördəkdir.”
🧪 Duck Typing nə deməkdir?
Duck Typing-də obyektin tipi yox, onun interfeysi və ya xüsusiyyətləri/metodları əsas götürülür. Yəni:
function printName(entity) { if (typeof entity.sayName === "function") { entity.sayName(); } else { console.log("Bu obyektin sayName funksiyası yoxdur."); } }
Burada
entity
adlı obyektinsayName()
funksiyası olub-olmaması yoxlanılır. Onun hansı sinifdən və ya hansı tipdən olması önəmli deyil. Bu, Duck Typing yanaşmasıdır.
JavaScript-də Duck Typing nümunələri
const user = { name: "Elvin", sayName() { console.log(`Mənim adım ${this.name}`); }, }; const robot = { id: 42, sayName() { console.log("Mən bir robotam."); }, }; function greet(entity) { entity.sayName(); // Duck Typing prinsipi } greet(user); // Mənim adım Elvin greet(robot); // Mən bir robotam.
Hər iki obyektin
sayName()
funksiyası olduğu üçüngreet()
funksiyası uğurla işləyir. Obyektlərin tipi yox, davranışları ön plandadır.
Duck Typing ilə tip sistemi arasındakı fərqlər
Xüsusiyyət Tip əsaslı yanaşma (OOP) Duck Typing (JavaScript) Tip yoxlanışı Kompilyasiya zamanı Run-time (işləmə zamanı) Tipə əsaslanma Sinif və interfeys Obyektin davranışı Quraşdırılmış tiplər Zəruridir Məcburi deyil Əsas məqsəd Güvənlik və sabitlik Çeviklik və sadəlik
️ Duck Typing-in riskləri
Duck Typing çox çevik olsa da, müəyyən risklər yarada bilər:
- Run-time səhvlər: Əgər obyekt gözlənilən funksiyanı ehtiva etmirsə, proqram iş zamanı çökə bilər.
- Oxunmaz kod: Tip təhlükəsizliyi olmadığından, böyük layihələrdə kodun izlənməsi çətinləşə bilər.
- IDE köməyi az olur: Tip məlumatı olmadığı üçün kod tamamlaması və səhv yoxlamaları zəif ola bilər.
Bu səbəblərə görə, TypeScript kimi dillər Duck Typing-in üstünlüklərini qoruyaraq, struktur tip yoxlaması (structural typing) təklif edir.
Duck Typing vs Structural Typing (TypeScript)
TypeScript-də
interface
vasitəsilə Duck Typing daha formal şəkildə tətbiq edilir:interface Nameable { sayName(): void; } function greet(entity: Nameable) { entity.sayName(); } const person = { name: "Aysu", sayName() { console.log("Salam, mən Aysu"); }, }; greet(person); // ✅ Keçərli: struktura uyğundur
Burada
person
Nameable
interfeysinə uyğun davranır, çünkisayName
metoduna malikdir. Bu, TypeScript-də struktur əsaslı Duck Typing-dir.
Nəticə
JavaScript-də Duck Typing proqramçıya obyektin funksionallığına görə davranmaq imkanı verir. Bu yanaşma, daha çevik və rahat kod yazmağa imkan yaratsa da, səhv ehtimallarını artırır. Böyük layihələrdə ya öz tip yoxlamanızı əlavə etməlisiniz, ya da TypeScript kimi həllərə üstünlük verməlisiniz.
Bilik paylaşdıqca artan bir sərvətdir