Утиная типизация

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Типизация данных

Типобезопасность
Вывод типов
Статическая типизация
Динамическая типизация
Сильная и слабая типизация
Зависимые типы
Утиная типизация

Неявная типизация, латентная типизация или утиная типизация (калька с англ. Duck typing) — вид динамической типизации, применяемой в некоторых языках программирования (Perl, Smalltalk, Objective-C, Ruby, JavaScript, Groovy, ColdFusion, Boo, Lua, Go, C#), когда границы использования объекта определяются его текущим набором методов и свойств, в противоположность наследованию от определённого класса. То есть считается, что объект реализует интерфейс, если он содержит все методы этого интерфейса, независимо от связей в иерархии наследования и принадлежности к какому-либо конкретному классу.

Название термина пошло от английского «duck test»утиный тест»), который в оригинале звучит как:

«If it looks like a duck, swims like a duck and quacks like a duck, then it probably is a duck».
(«Если нечто выглядит как утка, плавает как утка и крякает как утка, то это, наверное, и есть утка».).

Утиная типизация решает такие проблемы иерархической типизации, как:

  • невозможность явно указать (путём наследования) на совместимость интерфейса со всеми настоящими и будущими интерфейсами, с которыми он идейно совместим;
  • экспоненциальное увеличение числа связей в иерархии типов при хотя бы частичной попытке это сделать.

Другим близким подходом является структурные подтипы в OCaml, где типы объектов совместимы, если совместимы сигнатуры их методов, независимо от объявленного наследования, причём всё это проверяется во время компиляции программы.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]