Ich fand diesen Beitrag auf der Suche nach gängigen C ++ - Idiomen, da ich mich in letzter Zeit ziemlich intensiv damit befasst habe und möchte, dass mein Code nicht so amateurhaft aussieht, wie ich es finde ... :-P
Nachdem ich einige Zeit mit Perl verbracht habe, habe ich festgestellt, dass Redewendungen in dieser Sprache denen in natürlichen Sprachen, wie Englisch oder Spanisch, sehr ähnlich sind (nur zwei, die ich gut genug kenne, um einige Redewendungen zu kennen).
Ich bin nicht der Meinung, dass eine Redewendung wie ein "kleines Designmuster" ist. Ich bin immer noch anderer Meinung, wenn auch weniger, dass ein Idiom ein Weg ist, um einen Sprachmangel zu umgehen.
Vielleicht kommt die Antwort von Luc Danton am nächsten, aber lassen Sie mich erklären. Ich denke, dass ein Idiom typisch für diejenigen ist, die die Sprache benutzen. Normalerweise ein allgemeiner Ausdruck oder eine Abfolge von Ausdrücken, die, obwohl sie vielleicht nicht offensichtlich sind, eine Operation ausführen oder die Absicht auf eine Weise ausdrücken, die für diejenigen sinnvoll ist, die fließend genug sind, um sie zuvor gesehen zu haben.
Zurück zu Perl, die vielleicht bekannteste Redewendung ist die " Schwartzsche Transformation ", ein Ausdruck, der Daten auf kompakte und effiziente Weise sortiert. Es ist nicht die naheliegendste Art, eine solche Operation durchzuführen, aber es ist kurz und bündig, und diejenigen, die es schon einmal gesehen haben, wissen sofort, was es tut.
Ein weiteres bemerkenswertes Beispiel ist " The Orcish Manoeuvre ", bei dem die Perl-Begriffe "Wahr / Falsch", "Reiche Operatoren" und "Operator-Priorität" verwendet werden.
Eine, die ich persönlich ziemlich mag, hat etwas mit dem Orkmanöver zu tun, aber ich kenne keinen Namen dafür:
push @{ $some_hash{$key} ||= [] }, $some_value;
Dies ist in der Tat keine Verschleierung, sondern ein klarer, kompakter Ausdruck von etwas, das ansonsten mehrere Zeilen benötigt. Wenn der Schlüssel im Hash vorhanden ist und einen echten Wert hat, nehmen Sie die Referenzierung als Array zurück und schreiben Sie $ some_value auf dieses Array. Wenn das Hash-Element nicht vorhanden ist oder einen falschen Wert hat, weisen Sie ihm ein leeres Array zu, dereferenzieren Sie das Array und führen Sie den Push aus.
Es ist auch erwähnenswert, dass seit Perl 5.14 ein Teil dieser Redewendung veraltet ist - push kann jetzt direkt auf die Array-Referenz angewendet werden, ohne dass @ {} benötigt wird! Ab Perl 5.10 kann auch // = anstelle von || = verwendet werden, wodurch nicht auf Wahrheit, sondern auf Definiertheit geprüft wird.