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