Что такое идиома программирования?

Я вижу фразу «идиома программирования», которую используют так, как будто ее все понимают. Но в результатах поиска и stackoverflow я все вижу ...

С микро:

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

На средний:

В макрос:

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

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

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


person Corbin March    schedule 19.11.2008    source источник
comment
Идиома программирования - это идиома, написанная на языке программирования.   -  person jaco0646    schedule 12.10.2018


Ответы (10)


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

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

person Christian Lescuyer    schedule 19.11.2008

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

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

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

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

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

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

person James Curran    schedule 19.11.2008
comment
-1 Хотя идиомы могут зависеть от синтаксиса, я думаю, что это еще не все. - person Thomas Eding; 02.01.2010
comment
Мне нравится этот ответ. В естественном языке идиома - это нечто, значение которой не может быть построено из значений составляющих ее терминов. Другими словами, семантически это неделимый атом, хотя синтаксически он может быть разделен. Итак, в программировании идиомы - это то, что вы не ставите под сомнение, а просто запоминаете наизусть и можете эффективно использовать. - person Sridhar Sarnobat; 01.09.2016

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

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

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

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

person Sam Hasler    schedule 19.11.2008

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

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

person Jim C    schedule 19.11.2008
comment
-1: Идиома программирования отличается от варианта без программирования. - person Thomas Eding; 02.01.2010
comment
... и все же это не так. - person Jason S; 27.09.2017

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

Программист должен владеть хорошими алгоритмами и идиомами.

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

person Ahmad Ajmi    schedule 14.05.2013

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

Я предполагаю, что вы уже прошли этот путь!

person Mat Nadrofsky    schedule 19.11.2008
comment
Это просто делегирует вопрос Что такое конструкция? Это микро, средний или макро? - person Pacerier; 14.06.2014

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

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

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

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

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

person Zuu    schedule 15.06.2009
comment
Когда я слышу Socket, я думаю, что это шаблон ввода-вывода. Я не считаю это идиомой - шаблоны существуют в разных языках, тогда как (как описано большинством других респондентов) идиомы, как правило, зависят от языка. - person Tom; 11.02.2011
comment
Я не дал свой конкретный ответ как попытку различить «идиому» и «шаблоны», что должно быть ясно, если вы прочитаете первые пять слов. Это был информативный и пояснительный ответ. - person Zuu; 22.02.2011

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

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

person Aaron Palmer    schedule 19.11.2008

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

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

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

person ibm2100    schedule 13.01.2012

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

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

person Martin Spamer    schedule 20.06.2018