Ідіома програмування — стійкий спосіб вираження деякої складеної конструкції в одній або кількох мовах програмування. Ідіома є шаблоном розв'язання задачі, запису алгоритму чи структури даних шляхом комбінування вбудованих елементів мови.

Ідіому можна вважати найбільш низькорівневим шаблоном проєктування, що застосовується на стику проєктування та кодування мовою програмування. Ідіома приписує конкретний спосіб реалізації певних деталей та відношень між ними засобами конкретної мови. Набір ідіом залежить від мови програмування, і та сама ідіома може у двох різних мовах виглядати по-різному, або в ній може не бути потреби в одній із них.

Ідіома може являти собою відтворення в мові елементів семантично іншої мови, які в цій мові теж можна застосувати, але сама мова до цього не спонукає (тобто, вони в ній не є ідіомами). З цієї позиції багато шаблонів у об'єктно-орієнтованому проєктуванні розглядаються як ідіоматичне відтворення елементів функційних мов.

Приклади простих ідіом

Інкремент У мовах типу BASIC ідіома для збільшення на 1 значення змінної виглядає так: 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() }; # аналогічно # Використання "голого блоку" та інструкції redo { 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. Позиція Шоу полягає в тому, що той, хто вивчає мови програмування, має вивчати не тільки ідіоми конкретної мови програмування, але й альтернативні способи кодування — це дає змогу уникнути індоктринації та полегшує перехід на інші мови.

Див. також Resource Acquisition Is Initialization

Посилання C++ programming idioms у Wikibooks. Moshe Zadka, Idioms and Anti-Idioms in Python

Примітки