Ho trovato questo post alla ricerca di idiomi C ++ comuni, dato che recentemente ho iniziato ad approfondire abbastanza e vorrei che il mio codice non sembrasse dilettantesco come penso che sia ... :-P
Avendo trascorso un po 'di tempo con Perl, ho trovato idiomi in quella lingua per essere molto simili a quelli trovati in lingue naturali, come l'inglese o lo spagnolo (solo due ne conosco abbastanza bene per conoscerne alcuni idiomi).
Non sono d'accordo sul fatto che un idioma sia come un "piccolo disegno". Non sono ancora d'accordo, anche se meno, che un idioma è un modo per aggirare un deficit di una lingua.
Forse la risposta di Luc Danton è più vicina, ma lasciatemi spiegare. Penso che un idioma sia, beh, idiomatico di coloro che usano la lingua. Di solito, un'espressione o una sequenza comune di espressioni che, sebbene non sia ovvia, esegue un'operazione o esprime l'intento in un modo che ha senso per coloro che sono fluenti abbastanza per averlo visto prima.
Tornando a Perl, forse l'idioma più noto è " Schwartzian Transform ", un'espressione che esegue un ordinamento sui dati in modo compatto ed efficiente. Non è il modo più ovvio per eseguire un'operazione del genere, ma è concisa e chi l'ha già visto sa immediatamente cosa sta facendo.
Un altro esempio degno di nota è " La manovra degli orchi ", che sfrutta le nozioni di Perl di vero / falso, operatori ricchi e precedenza degli operatori.
Uno che personalmente mi piace un po 'è in qualche modo collegato alla manovra degli orchi, ma non conosco alcun nome per questo:
push @{ $some_hash{$key} ||= [] }, $some_value;
Questo non è certo offuscamento, ma piuttosto un'espressione chiara e compatta di qualcosa che altrimenti richiederebbe diverse linee. Se la chiave è presente nell'hash e ha un valore vero, de-referenzia una matrice e spinga $ some_value su quella matrice. Se l'elemento hash non è presente o ha un valore falso, assegnagli un array vuoto, quindi deniferenzia l'array e fai il push.
Vale anche la pena notare che dal Perl 5.14, parte di questo idioma è obsoleto - push ora può operare direttamente sul riferimento dell'array, non è necessario @ {}! Inoltre, dal Perl 5.10, si può usare // = invece di || = che controlla non per verità ma per definizione.