Как называется использование утиной печати - PullRequest
1 голос
/ 23 января 2011

Как мне назвать процесс использования утка, набрав ? Что я должен сказать: «Я выполняю печать по утке» или «Я проверяю, если это утка :)».

Утиная проверка звучит не очень хорошо, а проверка типа - просто неправильное название.

Ответы [ 3 ]

2 голосов
/ 23 января 2011

Я использую утку, набрав , я бы сказал.Это по тому же принципу, что и . Я использую статическую типизацию , хотя это разные вещи.

0 голосов
/ 28 июля 2017

Утка набрав

Название происходит от фразы:

Если это похоже на утку, плавает, как утка, и крякает, как утка, тогда это, вероятно, утка.

https://en.wikipedia.org/wiki/Duck_test

Что подразумевает, что, если у него есть все соответствующие атрибуты утки, зачем делать тщательные тесты, чтобы проверить, не является ли это чем-то иным, чем утка.

Это может быть что-то иное, чем утка, но большинству людей все равно, потому что это похоже на утку в тех отношениях, которые сейчас имеют значение.

Утиная печать похожа на это следующим образом: зачем беспокоиться о контроле типа параметров и переменных, чтобы ограничить то, какие операции может выполнять пользователь.

Неважно, какие типы вы передаете в функцию, если операции по-прежнему работают с любым типом, который на самом деле.

Если вы можете добавить два типа, кого волнует, какой они тип номера?

Если объект, который вы передаете в функцию paginateResult(), имеет query() и метод get_next_result(), какое это имеет значение, какого типа он является?

В статически типизированном языке объект должен быть подклассом queryResult или реализовывать интерфейс paginates.

https://en.wikipedia.org/wiki/Duck_typing

0 голосов
/ 23 января 2011

Я думаю, что здесь важен контекст, мы говорим о встроенных комментариях или общих документах по дизайну?

Для документов по дизайну я думаю, что было бы разумно сказать Я использую утку, набирающую .

В данный момент кода я не уверен, что это полезно говорить.Подумайте, используя какой-нибудь вымышленный язык

 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-программы.В комментарии может быть сказано, почему вы знаете, что этот объект может вычислить медиану, или что делать, если он не может.

...