Как мне вызвать процесс использования утиного набора текста? Что я должен сказать «Я выполняю утиную печать» или «Я проверяю, не утка ли это:)».
Проверка утки звучит не очень хорошо, а проверка типов — просто неправильное название для нее.
Как мне вызвать процесс использования утиного набора текста? Что я должен сказать «Я выполняю утиную печать» или «Я проверяю, не утка ли это:)».
Проверка утки звучит не очень хорошо, а проверка типов — просто неправильное название для нее.
Я бы сказал, что использую утиную печать. Это то же самое, что и «Я использую статическую типизацию», хотя это разные вещи.
Я думаю, что контекст здесь имеет значение, мы говорим о встроенных комментариях или общих проектных документах?
Я думаю, что для дизайнерских документов вполне разумно сказать я использую утиную печать.
В данный момент кода я не уверен, что это полезно говорить. Рассмотрим, используя какой-то вымышленный язык
function wibble(anObject) {
// what do we say here?
anObject.computeMedianValue();
anObject.render(device);
}
Во-первых, обратите внимание, что мы на самом деле не проверяем, что это утка, в примерах я вижу, что код просто
obj.quack()
Структура программы обычно такова, что передается только то, что может крякать. Я не вижу много примеров
if (obj can quack )
obj.quack()
else if ( obj can grunt)
obj.grunt()
это было бы не очень полиморфно, но даже если бы мы хотели проверить возможности, мы почти не писали бы код
if ( obj isA duck)
вся идея утиной типизации заключается в том, что мы рассматриваем конкретные возможности, которые нам нужны в текущем контексте — ходить (как утка), крякать (как утка) — а не «это утка?»
Так что в коде я бы особо не упоминал утиную печать, не больше, чем разбрызгивая Я делаю объектную ориентацию вокруг стандартной Java-программы. В комментарии может быть сказано, почему вы знаете, что этот объект может вычислить медиану, или что делать, если он не может.
Утиный ввод
Название происходит от фразы:
Если он выглядит как утка, плавает как утка и крякает как утка, то, вероятно, это утка.
https://en.wikipedia.org/wiki/Duck_test
Это означает, что если у него есть все соответствующие атрибуты утки, зачем проводить тщательные тесты, чтобы проверить, является ли он чем-то другим, кроме утки.
Это может быть что-то иное, чем утка, но большинству людей все равно, потому что это похоже на утку в тех отношениях, которые имеют значение прямо сейчас.
Утиная типизация похожа на это: зачем контролировать тип параметров и переменных, чтобы ограничить операции, которые может выполнять пользователь.
Неважно, какие типы вы передаете функции, пока операции все еще работают с любым типом, которым он является на самом деле.
Если вы можете добавить два типа, какая разница, какой у них числовой тип?
Если объект, который вы передаете функции paginateResult()
, имеет метод query()
и метод get_next_result()
, какое значение имеет его тип?
В языке со статической типизацией объект должен быть подклассом queryResult
или реализовывать интерфейс paginates
.
https://en.wikipedia.org/wiki/Duck_typing