Лучшие вопросы
Таймлайн
Чат
Перспективы
Идиома (программирование)
способ выражения некой не-элементарной конструкции, типичный для одного или нескольких языков программирования Из Википедии, свободной энциклопедии
Remove ads
Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка.
![]() | У этой статьи по информационным технологиям есть несколько проблем, помогите их исправить: |
Идиому можно считать самым низкоуровневым шаблоном проектирования, применяемым на стыке проектирования и кодирования на языке программирования. Идиома предписывает конкретный способ реализации определённых деталей и отношений между ними средствами конкретного языка. Набор идиом зависит от языка программирования, и одна и та же идиома может выглядеть в двух разных языках по-разному, либо в ней может не быть надобности в одном из них[1].
Идиома может представлять собой воспроизведение в языке элементов семантически иного языка, которые в данном языке тоже могут быть применимы, но не провоцируются самим языком (то есть не входят в число его идиом). С этой позиции многие шаблоны в объектно-ориентированном проектировании рассматриваются как идиоматическое воспроизведение элементов функциональных языков[2][3][нет в источнике].
Remove ads
Примеры простых идиом
Суммиров вкратце
Перспектива
Инкремент
В языках типа 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;
Remove ads
Критика
Автор книги «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, не приветствуется, а вместо него следует использовать конструкцию .each
. Позиция Шоу состоит в том, что изучающие языки программирования должны изучать не только идиомы конкретного языка программирования, но и альтернативные способы кодирования — это позволяет избежать индоктринации и облегчает переход на другие языки.
Remove ads
См. также
Ссылки
- C++ programming idioms (англ.) в Wikibooks.
- Moshe Zadka, Idioms and Anti-Idioms in Python (англ.)
Примечания
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads