Что такое идиома программирования? - PullRequest
64 голосов
/ 19 ноября 2008

Я вижу фразу "идиома программирования", как если бы она была общепринятой. Но в результатах поиска и в стеке я вижу все ...

Из микро:

  • Увеличение переменной
  • Представление бесконечного цикла
  • Обмен значений переменных

до среднего:

к макросу:

Существует ли единое общее определение термина "идиома программирования"? Поскольку "идиома программирования" используется во многих областях:

  • Микро: синтаксический нюанс или общий синтаксис
  • Средний: общий стиль и модели
  • Макрос: программирование парадигм как идиома

Допустимо ли использовать фразу в любой из этих областей? Пока ответы сосредоточены на синтаксических идиомах. Остальные также действительны?

Ответы [ 10 ]

48 голосов
/ 19 ноября 2008

Идиома программирования - это обычный способ кодирования задачи на определенном языке. Например, цикл часто пишется так в C:

for (i=0; i<10; i++)

PHP поймет похожую конструкцию:

for ($i = 1; $i <= 10; $i++)

Но в PHP не рекомендуется использовать циклы над массивом. В этом случае вы бы использовали:

foreach ($arr as $value)

В то время как в Ruby вы бы использовали:

(1..10).each

для цикла или:

array.each

Существует много возможностей написать цикл в этих языках. Использование идиомы делает его сразу узнаваемым опытными читателями. Затем они могут тратить свое время на более важные проблемы.

16 голосов
/ 19 ноября 2008

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

Переместив это на арену программирования, мы получим такие вещи:

 if(c=GetValue())
 {...}

что на самом деле означает:

 c = GetValue();
 if (c != 0)
 {....}

, который понимает каждый программист на C / C ++, но совершенно сбивает с толку кого-то, пришедшего с другого языка программирования.

10 голосов
/ 19 ноября 2008

См. http://en.wikipedia.org/wiki/Programming_idiom

Идиома программирования - это шаблон, алгоритм или способ структурирования кода. Говорить о идиомах программирования - это говорить о тех шаблонах, которые часто повторяются в коде, или предлагать новые.

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

Сказать, что код не является идиоматическим, значит сказать, что он не структурируется так, чтобы читатели могли эффективно думать о коде.

2 голосов
/ 14 мая 2013

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

Программист должен приобрести хорошие алгоритмы и идиомы.

Алан Дж. Перлис - Предисловие SICP

2 голосов
/ 15 июня 2009

Идиома - это 'шаблон', который можно идентифицировать в нескольких местах.

Я бы не сказал, что это как-то связано с конкретным языком программирования.

Iterator foo;
foo.reset();
while (foo.next())
{
    print(foo.value());
}

Это фрагмент того, что я бы назвал идиомой «для каждого», которая выражается немного по-разному в ряде языков.

Еще один отличный пример идиомы - Socket . Все платформы, которые утверждают, что имеют сокеты, все работают концептуально одинаково, то есть все они имеют примерно одинаковый интерфейс.

2 голосов
/ 19 ноября 2008

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

В программировании многие, даже большинство инструкций, не поняты широкой публике, хотя они и являются английскими словами. например "для цикла". Хотя они имеют смысл для программистов, они не имеют значения для большинства других людей.

2 голосов
/ 19 ноября 2008

С WikiPedia : идиома программирования - это средство выражения повторяющейся конструкции на одном или нескольких языках программирования.

Полагаю, вы уже пошли по этому пути!

1 голос
/ 13 января 2012

Зайди в колею рано: проделай тот же процесс тем же способом. Накопить идиомы. Стандартизация. Единственное различие (!) Между Шекспиром и вами было размером его списка идиом, а не размером его словарного запаса.

  • АЛАН ПЕРЛИС, Эпиграммы в программировании

http://www.cs.yale.edu/quotes.html

1 голос
/ 19 ноября 2008

Идиома - это способ сказать что-то особенное для данного языка. Например, вот несколько английских идиом .

Вы можете экстраполировать это, чтобы применить концепцию к программированию.

0 голосов
/ 20 июня 2018

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

Идиома программирования может считаться дескриптивной для класса решений, которые могут быть перенесены в различные случаи. Представьте, что while { ... } против do {} while это идиоматические слова, они содержат одни и те же слова, но порядок имеет важное различие. Точная формулировка будет отличаться в зависимости от языка, но основное значение и значение будут отличаться; например, do {} while всегда будет выполняться один раз, независимо от того, какой язык или операторы используются для его реализации. Как идиома это переносимая форма идеи. Его можно использовать во многих обстоятельствах и выражать разными словами (утверждениями / командами), но фундаментальный результат всегда будет одинаковым.

...