Я знайшов цю публікацію в пошуку загальних ідіом C ++, оскільки я останнім часом досить глибоко заглиблювався в неї і хотів би, щоб мій код не виглядав настільки любительським, як я вважаю, що це ... :-P
Провівши зовсім небагато часу з Perl, я виявив ідіоми на цій мові подібні до тих, що зустрічаються на природних мовах, наприклад, англійській чи іспанській (лише двох я досить добре знаю, щоб знати деякі ідіоми).
Я не погоджуюся з тим, що ідіома - це як «маленька модель дизайну». Я все ще не погоджуюся, хоча і менш, що ідіома - це спосіб подолати дефіцит мови.
Можливо, відповідь Люка Дантона найближча, але дозвольте мені пояснити. Я думаю, що ідіома - це, мабуть, ідіоматика тих, хто користується мовою. Зазвичай це загальний вираз або послідовність виразів, які, хоча і не є очевидними, виконують операцію або виражають намір таким чином, що має сенс для тих, хто досить вільно володіє , щоб побачити це раніше.
Назад до Perl, можливо, найвідомішою ідіомою є " Трансформація Шварца ", вираз, який виконує сортування даних компактно та ефективно. Це не найочевидніший спосіб здійснити таку операцію, але це лаконічно, і ті, хто її бачив раніше, миттєво знають, що вона робить.
Ще одним помітним прикладом є " Маневри Оркіша ", який використовує переваги уявлень Perl про справжні / хибні, багаті оператори та пріоритет оператора.
Те, що мені особисто дуже подобається, дещо пов’язане з маневром оркішів, але я не знаю цього імені:
push @{ $some_hash{$key} ||= [] }, $some_value;
Це справді не затуплення, а скоріше чітке, компактне вираження чогось, що інакше потребує декількох рядків. Якщо ключ присутній у хеші та має справжнє значення, скасуйте його як масив та натисніть $ some_value на цей масив. Якщо хеш-елемент відсутній або має помилкове значення, призначте йому порожній масив, а потім відновіть цей масив і натисніть.
Варто також зазначити, що станом на Perl 5.14 частина цієї ідіоми застаріла - тепер функція push може працювати безпосередньо на посилання на масив, ні @ {} не потрібно! Також, на Perl 5.10, можна використовувати // = замість || =, що перевіряє не на істинність, а на визначені.