Interested Article - Идиома (программирование)

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

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

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

Примеры простых идиом

Инкремент

В языках типа BASIC идиома для единичного приращения значения переменной выглядит так:

  i = i + 1

Укороченный вариант в C-подобных языках:

  i += 1;  /* i = i + 1;  */
  ++i;     /* тот же результат */
  i++;     /* тот же результат */

Pascal содержит процедуру аналогичного назначения:

  i := i + 1;
  Inc(i); (* тот же результат *)

Обмен значениями (swap)

В большинстве языков обмен значениями между двумя переменными выглядит следующим образом:

  temp = a;
  a = b;
  b = temp;

В Perl это выглядит элегантнее:

  ($a, $b) = ($b, $a);

Бесконечный цикл

Pascal :

  while true do begin
    do_something();
  end;

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

  for (;;) {
    do_something();
  }

Perl поддерживает как C-синтаксис, так и другие варианты:

  do_something() while (1);      # укороченный бесконечный цикл
  while (1) { do_something() };  # аналогично
  # Using a "naked block" and the redo operator
  {
    do_something();
    redo;
  }

Ada :

  loop
    do_something;
  end loop;

Python :

    while True:
        do_something()

Выборка из ассоциативного массива

Во многих языках имеется реализация ассоциативного массива , т. н. хеш-таблица .

Реализация ассоциативного массива в Perl :

  my %elements = map { $_ => 1 } @elements;

Критика

Автор книги «Learn Ruby The Hard Way» Зед Шоу отмечает, что отношение к идиомам в сообществах разработчиков говорит о том, что применение идиом следует отнести к категории нравов , так как при письме на естественном языке, требующем чёткости изложения, идиом следует избегать . Им приводится следующий пример из «Ruby Styleguide» :

arr = [1, 2, 3]

# bad
for elem in arr do
  puts elem
end

# good
arr.each { |elem| puts elem }

Использование цикла for, согласно официальному стилю Ruby , не приветствуется, а вместо него следует использовать конструкцию .each . Позиция Шоу состоит в том, что изучающие языки программирования должны изучать не только идиомы конкретного языка программирования, но и альтернативные способы кодирования — это позволяет избежать индоктринации и облегчает переход на другие языки.

См. также

Ссылки

  • (англ.) в Wikibooks.
  • (англ.)

Примечания

  1. Buschmann, F. and Meunier, R. and Rohnert, H. and Sommerlad, P. and Stal, M. Pattern-Oriented Software Architecture, A System of Patterns. — Wiley, 2013. — 350 p. — ISBN 9781118725269 .
  2. . Дата обращения: 5 декабря 2014. 13 декабря 2014 года.
  3. . Дата обращения: 5 декабря 2014. 12 декабря 2014 года.
  4. (недоступная ссылка)
  5. от 15 августа 2013 на Wayback Machine (англ.)
Источник —

Same as Идиома (программирование)