Как называется использование утиной печати

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

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


person Alex Bolotov    schedule 22.01.2011    source источник
comment
... это вопрос программирования?   -  person user541686    schedule 23.01.2011
comment
@Anonymous: Ха-ха-ха... нет, я думаю, он имеет в виду утиный ввод.   -  person user541686    schedule 23.01.2011
comment
О, я не понимаю всей этой чуши с теорией программирования.   -  person    schedule 23.01.2011
comment
Я думаю, вы должны сказать, что я крякаю. и просто покончим с этим. хD   -  person user541686    schedule 23.01.2011
comment
Кстати, для тех, кто интересуется, почему это называется утиной печатью: эта фраза происходит от предложения, в котором говорится: «Если это выглядит как утка и крякает как утка, значит, это и есть утка».   -  person user541686    schedule 23.01.2011


Ответы (3)


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

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

person djna    schedule 22.01.2011

Утиный ввод

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

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

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

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

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

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

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

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

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

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

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

person Sam Liddicott    schedule 28.07.2017