Качина типізаціяНеявна типізація, латентна типізація або качина типізація (калька з англ. Duck typing) — різновид динамічної типізації, застосовуваної в деяких мовах програмування, коли межі використання об'єкта визначаються його поточним набором методів і властивостей, на противагу успадкуванню від певного класу. Тобто вважається, що об'єкт реалізує інтерфейс, якщо він містить всі методи цього інтерфейсу, незалежно від зв'язків в ієрархії наслідування та приналежності до якогось конкретного класу. Назва терміна походить від англійського «duck test» («качиний тест»), який в оригіналі звучить так:
Качина типізація розв'язує такі проблеми ієрархічної типізації як:
Іншим близьким підходом є структурні підтипи в OCaml, де типи об'єктів сумісні, якщо сумісні сигнатури їхніх методів, незалежно від оголошеного наслідування, причому все це перевіряється під час компіляції програми. Приклади концепціїРозглянемо такий псевдокод мови з качиною типізацією: function calculate(a, b, c) => return (a+b)*c example1 = calculate (1, 2, 3) example2 = calculate ([1, 2, 3], [4, 5, 6], 2) example3 = calculate ('apples ', 'and oranges, ', 3) print to_string example1 print to_string example2 print to_string example3 У цьому прикладі кожного разу викликається функція 9 [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6] apples and oranges, apples and oranges, apples and oranges, Таким чином, качина типізація дозволяє поліморфізм без успадкування. Єдиним обмеженням на функцію На PythonПеревірка на качку може бути ілюстрована такими кодами.
В цьому прикладі
В цьому прикладі розглядається функція
У мовах зі статичною типізацієюІноді мови зі статичною типізацією, такі як Boo чи версія 4 випуску C# мають додаткову анотацію типів[1][2], котра інструктує компілятор розміщувати перевірку типів і класів на стадії виконання, а не під час компіляції, і включати код для перевірки типів у відкомпільований вивід. Інші мови зі статичною типізацією, наприклад F#, підтримують статичну качину типізацію, коли типи перевіряються на наявність певних сигнатур методів під час компіляції. Виноски
Посилання |
Portal di Ensiklopedia Dunia