Идиома по сравнению с шаблоном

В контексте программирования, как идиомы отличаются от шаблонов?

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

Лучшим различием, которое я могу придумать, является код, который предназначен, чтобы быть скопированным, почти буквально чаще называется шаблоном, в то время как код означал быть взятым, менее буквально чаще называется идиомой, но такой даже не всегда верно. Это, кажется, не больше, чем стилистическое различие или различие в модном словечке. Это соответствует Вашему восприятию того, как термины используются? Существует ли семантическое различие?

14
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

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

Обычно я считаю, что основное различие между "шаблонами" и "идиомами" должно быть одним из размеров. Идиома - это что-то маленькое, например, "использовать интерфейс для типа переменной, которая содержит коллекцию", в то время как Patterns, как правило, больше. Я думаю, что небольшие идиомы действительно означают, что они чаще специфичны для языка (пример, который я только что привел, был Java идиомой), но я не думаю, что это их определяющая характеристика.

6
ответ дан 1 December 2019 в 09:32
поделиться

Идиомы являются определенными для языка.

Узоры являются независимыми от языка принципами разработки, обычно писавшимися на "языке образца" (универсальный шаблон) описание вещей, таких как обстоятельства мотивации, достоинства и недостатки, связанные узоры, и т.д.

12
ответ дан 1 December 2019 в 09:32
поделиться

Так как если вы поставили 5 программистов в комнате, они, вероятно, даже не согласны с тем, что делают шаблоны, нет реального «правильного ответа».

Одно мнение, которое я слышал один раз и действительно понравился (хотя не может за жизнь меня вспомнить источник), заключается в том, что идиомы - это то, что должно быть на вашем языке, или есть какой-то язык. И наоборот, они являются хитростью, которые мы используем, потому что наш язык не предлагает для них прямую примитию. Например, в Java нет синглтона, но мы можем имитировать его, скрывая конструктор и предлагая метод GetInstance.

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

3
ответ дан 1 December 2019 в 09:32
поделиться

Когда люди наблюдают за разработкой программы от на высоком уровне (аналитики, консультанты, академики, методологии Gurus и т. Д.), видят разработчики, делающие то же самое снова и снова в различных ситуациях и средах, а затем разум Из этого наблюдения можно отгонить в шаблон. Узор - это способ «делать вещи» с помощью программных инструментов под рукой, которые представляют собой обычную абстракцию.

Некоторые примеры:

  • Программирование OO приняло глобальные переменные от разработчиков. Для тех случаев, когда им действительно по-прежнему нужны глобальные переменные, но нужен способ сделать их использование чистых и ориентированных на объект, есть диаграмма синглтон .

  • Иногда вам необходимо создать новый объект, имеющий один из различных возможных различных типов, в зависимости от некоторых обстоятельств. Уродливый путь может включать в себя заявление о постоянно расширяющейся . Принятый «элегантный» способ достижения этого способом OO - через «Фабрика» или «Фабричный метод».

Иногда многие разработчики делают вещи определенным образом, но это плохой способ, которым следует поправить. Это может быть формализовано в Antipattern .

Узоры являются высокоуровневым способом делать вещи, и большинство из них независимо от языка. Может ли вы создавать свои объекты с Новым объектом или Object.New нематериально на шаблон.

Поскольку шаблоны являются чем-то немного теоретическим и формальным, обычно есть формальный шаблон (хе - перегрузка слов! Давайте скажем «шаблон») для их описания. Такой шаблон может включать в себя:

  • Имя
  • достигается эффект
  • Обоснование
  • Ограничения и ограничения
  • Как это сделать

Идиомы - это что-то гораздо более низкий уровень, и обычно работают в язык языка. Пример:

*dst++ = *src++

В C копирует элемент данных из SRC на DST при увеличении указателей на обои; Обычно это делается в петле. Очевидно, вы не увидите эту идиому в Java или Object Pascal.

while <INFILE> { print chomp; }

(примерно цитируется из памяти) IDIOM Perl для обработки входного файла и распечатывать все строки в файле. В этом операторе много неявная переменная использования. Опять же, вы не увидите этот конкретный синтаксис где угодно, кроме как в Perl; Но старый хакер Perl будет быстро посмотреть на утверждение и сразу узнаю, что вы делаете.

7
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: