Encontré esta publicación en busca de modismos comunes en C ++, ya que he estado profundizando en ella recientemente y me gustaría que mi código no se vea tan aficionado como creo que es ... :-P
Después de haber pasado bastante tiempo con Perl, he encontrado que los idiomas en ese idioma son muy parecidos a los que se encuentran en los idiomas naturales, como el inglés o el español (solo dos lo sé lo suficiente como para saber algunos idiomas). p>
No estoy de acuerdo con que un idioma sea como un "patrón de diseño pequeño". Todavía no estoy de acuerdo, aunque no tanto, de que un modismo sea una forma de solucionar una deficiencia en un idioma.
Quizás la la respuesta de Luc Danton sea la más cercana, pero déjame explicarte. Creo que un idioma es, bueno, idiomático de aquellos que usan el lenguaje. Por lo general, una expresión común o una secuencia de expresiones que, aunque quizás no sean obvias, realizan una operación o expresan la intención de una manera que tenga sentido para aquellos que son fluidos lo suficiente como para haberlo visto antes.
De vuelta a Perl, quizás el lenguaje más conocido es la " Schwartzian Transform ", una expresión que realiza una clasificación Sobre los datos de forma compacta y eficiente. No es la forma más obvia de realizar una operación de este tipo, pero es sucinta y los que la han visto antes saben al instante lo que está haciendo.
Otro ejemplo notable es " The Orcish Maneuver ", que aprovecha las nociones de Perl de verdadero / falso, operadores ricos y precedencia del operador.
Una que a mí personalmente me gusta un poco está relacionada con la Maniobra Orca, pero no conozco ningún nombre para ella:
push @{ $some_hash{$key} ||= [] }, $some_value;
De hecho, esto no es una ofuscación, sino más bien una expresión clara y compacta de algo que de otra manera tomaría varias líneas para hacer. Si la clave está presente en el hash y tiene un valor verdadero, elimine la referencia como una matriz y presione $ some_value en esa matriz. Si el elemento hash no está presente o tiene un valor falso, asígnele una matriz vacía, luego elimine la referencia a esa matriz y realice la inserción.
También vale la pena señalar que a partir de Perl 5.14, parte de este idioma está obsoleto: push ahora puede operar directamente en la referencia de la matriz, ¡no se necesita @ {}! Además, a partir de Perl 5.10, se puede usar // = en lugar de || = que comprueba no la verdad sino la definición.