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