この記事では、一般的なC ++のイディオムを検索していることがわかりました。最近、かなり深くなってきたため、コードがアマチュアっぽく見えないようにしたいのですが... :-P
Perlでかなりの時間を費やして、私はその言語のイディオムが英語やスペイン語のような自然言語で見られるイディオムに非常に似ていることを発見しました(いくつかのイディオムを十分に知っているのは2つだけです)。
イディオムは「小さなデザインパターン」のようなものではないことに同意します。イディオムは言語の欠陥を回避する方法であるということにはあまり賛成しませんが、そうは思いません。
おそらく、リュック・ダントンの答えが最も近いかもしれませんが、説明させてください。私はイディオムが、まあ、だと思い慣用的な言語を使う人の。通常、共通の表現または一連の表現は、おそらく明白ではありませんが、操作を実行するか、以前にそれを見て十分に流な人に意味のある方法で意図を表現します。
Perlに戻って、おそらく最もよく知られているイディオムは、「シュワルツ変換」、コンパクトで効率的な方法でデータのソートを実行する式です。これはそのような操作を実行する最も明白な方法ではありませんが、簡潔であり、それを以前に見たことがある人はそれが何をしているのかすぐにわかります。
もう1つの注目すべき例は、「The Orcish Maneuver」です。これは、perlのtrue / false、豊富な演算子、および演算子の優先順位の概念を利用しています。
私が個人的にかなり好きなものは、オークの操縦にいくらか関係していますが、その名前は知りません。
push @{ $some_hash{$key} ||= [] }, $some_value;
これは確かに難読化ではなく、それ以外の場合はいくつかの行を取る必要がある何かの明確でコンパクトな表現です。キーがハッシュに存在し、真の値を持っている場合、配列としてそれを逆参照し、その配列に$ some_valueをプッシュします。ハッシュ要素が存在しないか、偽の値を持っている場合、空の配列を割り当て、その配列を逆参照してプッシュを実行します。
Perl 5.14の時点で、このイディオムの一部が廃止されていることにも注意する価値があります。プッシュは配列参照を直接操作できるようになり、@ {}は不要です。また、Perl 5.10の時点では、|| =の代わりに// =を使用できます。これは、真実ではなく定義されているかどうかをチェックします。