Entiendo que un "idioma" es una operación o patrón común que en un idioma en particular no se simplifica por la sintaxis del lenguaje central, como el incremento de enteros:
i = i + 1;
En C ++, este modismo es simplificado por un operador:
++i;
Sin embargo, cuando alguien usa el término "idiomático", no estoy seguro de cómo entenderlo. ¿Qué hace que un código sea "idiomático"?
Respuestas:
Una forma idiomática de escribir algún código es cuando lo escribes de una manera muy específica debido a expresiones idiomáticas específicas del idioma que otros idiomas no tienen.
Por ejemplo, en C ++, explotar el idioma RAII conduce a formas de escribir código C ++ administrando recursos que son idiomáticos.
Otro ejemplo sería usar las comprensiones de listas en Python para generar listas. Es idiomático porque habrías usado la comprensión de listas en Python idiomático, pero podrías haber hecho lo mismo usando una función de generador en cualquier otro idioma o incluso en Python.
A menudo, alguien que prueba un nuevo idioma sin usar los modismos específicos de este idioma no escribirá código idiomático.
fuente
TryAdd()
en laDictionary
clase Genérica para verificar primero!Contains()
y luego llamarAdd()
, ¿sería idiomático? Estoy usando una función específica de C # - métodos de extensión.Definición normal
Definición de programación
fuente
Idiomático en el contexto de la programación generalmente se puede definir como "la forma más natural de expresar algo en un lenguaje"
Veo que la palabra idiomática aparece particularmente en Ruby. En Ruby, hay capacidades masivas de metaprogramación, y para escribir código de Ruby idiomático, generalmente debe usarlas.
Tenga en cuenta que el hecho de que un código sea idiomático no significa que esté limpio o que sea conciso. Muchas veces debes hacer compromisos.
Básicamente, lo idiomático se refiere más comúnmente a la forma más común de escribir algo en un idioma, a menudo incluyendo "jerga" (modismos). Si un código no es idiomático, puede ser perfectamente legible, conciso, limpio y correcto, pero puede sentirse / verse incómodo en el lenguaje utilizado. Es preferible saber si reescribir idiomáticamente un código de este tipo sería algo bueno y debe juzgarse caso por caso.
El inglés idiomático, por ejemplo, puede depender de la región. El uso de la palabra
bum
probablemente sea necesario para el inglés idiomático del Reino Unido, mientras quebutt
es más apropiado para el inglés de los EE. UU. (No sé mucho inglés británico tristemente: /)fuente
El mejor ejemplo que puedo idear, fuera de mi cabeza, para algo que es idiomático, proviene de Ruby.
En una gran cantidad de idiomas, puede iterar con:
O algo muy similar. Muchos idiomas también tienen una
foreach(x in SetOfXes)
construcción. Pero la iteración que es idiomática para Ruby incluye cosas como:e incluso
Veo estos como idiomáticos porque representan una forma de hacer algo que es menos común, y que representa algo en el centro de la filosofía de su dominio. Ruby tiene una filosofía sobre la interacción con objetos que, aunque no es única, no es omnipresente.
En una nota semántica, cada vez que escucho la palabra idiomática, mi cerebro completa automáticamente el pensamiento como "idiomático para ...": simplemente lo analizo reflexivamente en relación con un tema específico.
fuente
collection.each do |current|
diferente deforeach(current in collection)
? Ambas son construcciones de bucle que se establecencurrent
en cada elemento decollection
.Las expresiones idiomáticas suelen ser la mejor manera posible de expresar una situación común y relativamente compleja en un idioma. Incrementar no es un idioma ni nada por el estilo. Usando el incremento de prefijo en lugar de postfix, podría argumentar que es un idioma de C ++.
Los modismos son la mejor manera de usar un lenguaje, según lo determinen los usuarios expertos. Un idioma real de C ++ sería objetos de función. Otro idioma sería RAII. No hay nada en el lenguaje que le indique que debe liberar recursos en el destructor. Pero es idiomático hacerlo. Otro ejemplo son las plantillas: es idiomático usar plantillas para, bueno, todo lo que pueda, pero no hay nada que le impida usar la herencia en exceso.
fuente
Tu definición no me parece correcta. Un modismo es una forma de escribir algo que puede o no ser posible en otros idiomas, pero que es común en este idioma. Por lo general, es más corto que la alternativa, pero eso no es realmente un requisito.
Puede ser más fácil explicarlo hablando de lo que no es idiomático. En C ++, es bastante idiomático escribir:
Es aún más idiomático escribir:
Este código hace exactamente lo mismo: algunas personas que son nuevas en C ++ podrían leerlo como prueba para ver si p es igual a lo que devuelve la función, pero eso no es lo que hace.
Compare con lo que alguien podría escribir, de manera no idiomática, que ha venido de otro idioma:
También verás estas cosas como no idiomáticas:
Porque el enfoque idiomático es
Las formas no idiomáticas no están mal, pero por lo general tardan más en escribir y siempre tardan más en leer, para aquellos que conocen los modismos. Si te llamo "el niño que lloró lobo" y conoces la historia, es más rápido que si te explico cómo las falsas alarmas hacen que la gente te ignore. El problema, por supuesto, es si no conoces la historia y no sabes qué tienen que ver los lobos con lo que estamos hablando. Del mismo modo, puede ser un problema si nunca
return x<y;
antes has visto y realmente no sabes lo que hace.fuente
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Cuando hay múltiples formas de expresar algo, la forma más común o comúnmente aceptada. Por ejemplo, usando una declaración estructurada en C en lugar del equivalente exacto usando declaraciones goto.
fuente