Идиома (программирование)
Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка. Идиому можно считать самым низкоуровневым шаблоном проектирования, применяемым на стыке проектирования и кодирования на языке программирования. Идиома предписывает конкретный способ реализации определённых деталей и отношений между ними средствами конкретного языка. Набор идиом зависит от языка программирования, и одна и та же идиома может выглядеть в двух разных языках по-разному, либо в ней может не быть надобности в одном из них[1]. Идиома может представлять собой воспроизведение в языке элементов семантически иного языка, которые в данном языке тоже могут быть применимы, но не провоцируются самим языком (то есть не входят в число его идиом). С этой позиции многие шаблоны в объектно-ориентированном проектировании рассматриваются как идиоматическое воспроизведение элементов функциональных языков[2][3][нет в источнике]. Примеры простых идиомИнкрементВ языках типа 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);
Бесконечный цикл 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;
while True:
do_something()
Выборка из ассоциативного массиваВо многих языках имеется реализация ассоциативного массива, т. н. хеш-таблица. Реализация ассоциативного массива в Perl: my %elements = map { $_ => 1 } @elements;
КритикаАвтор книги «Learn Ruby The Hard Way» Зед Шоу отмечает, что отношение к идиомам в сообществах разработчиков говорит о том, что применение идиом следует отнести к категории нравов, так как при письме на естественном языке, требующем чёткости изложения, идиом следует избегать[4]. Им приводится следующий пример из «Ruby Styleguide»[5]: arr = [1, 2, 3]
# bad
for elem in arr do
puts elem
end
# good
arr.each { |elem| puts elem }
Использование цикла for, согласно официальному стилю Ruby, не приветствуется, а вместо него следует использовать конструкцию См. такжеСсылки
Примечания
|