Entendo que um "idioma" seja uma operação ou padrão comum que, em um idioma específico, não seja simplificado pela sintaxe do idioma principal, como incremento inteiro:
i = i + 1;
No C ++, esse idioma é simplificado por um operador:
++i;
No entanto, quando alguém usa o termo "idiomático", não sei como entendê-lo. O que torna um pedaço de código "idiomático"?
Respostas:
Uma maneira idiomática de escrever algum código é quando você o escreve de uma maneira muito específica, devido a idiomas específicos de idioma que outros idiomas não possuem.
Por exemplo, em C ++, a exploração do idioma RAII leva a maneiras de escrever código C ++, gerenciando recursos idiomáticos.
Outro exemplo seria usar a compreensão de lista no Python para gerar listas. É idiomático porque você teria usado a compreensão da lista no Python idiomático, mas poderia ter feito o mesmo usando uma função de gerador em qualquer outra linguagem ou até mesmo no Python.
Geralmente, alguém que tenta um novo idioma sem usar os idiomas específicos para esse idioma não escreve código idiomático.
fonte
TryAdd()
naDictionary
classe Generic para verificar primeiro!Contains()
e depois chamarAdd()
, isso seria idiomático? Estou usando um recurso específico para métodos de extensão c #.Definição Normal
Definição de Programação
fonte
Idiomatic no contexto da programação geralmente pode ser definido como "a maneira mais natural de expressar algo em uma linguagem"
Vejo a palavra idiomática surgir particularmente em Ruby. No Ruby, existem enormes recursos de metaprogramação e, para escrever código Ruby idiomático, você geralmente deve usá-los.
Observe que apenas porque um pedaço de código é idiomático, não significa que ele seja limpo ou mesmo conciso. Muitas vezes você deve fazer compromissos.
Então, basicamente, idiomático se refere mais comumente à maneira mais comum de escrever algo em um idioma, muitas vezes incluindo "gírias" (expressões idiomáticas). Se um pedaço de código não for idiomático, ele pode ser perfeitamente legível, conciso, limpo e correto, mas pode parecer / parecer estranho no idioma usado. É preferível saber se reescrever um pedaço de código desse idioma seria realmente uma coisa boa e deve ser julgado caso a caso
O inglês linguístico, por exemplo, pode depender da região.
bum
Provavelmente, é necessário usar a palavra para o inglês idiomático do Reino Unido, enquantobutt
é mais apropriado para o inglês dos EUA. (Eu não sei muito inglês inglês do Reino Unido: /)fonte
O melhor exemplo que posso conceber, de cabeça para baixo, para algo idiomático, vem de Ruby.
Em vários idiomas, você pode iterar com:
Ou algo muito semelhante. Muitos idiomas também têm uma
foreach(x in SetOfXes)
construção. Mas a iteração idiomática para Ruby inclui coisas como:e até mesmo
Eu os vejo como idiomáticos, porque representam uma maneira de fazer algo menos comum e que representa algo no cerne da filosofia de seu domínio. Ruby tem uma filosofia sobre a interação com objetos que, embora não sejam únicos, não são onipresentes.
Em uma nota semântica, sempre que ouço a palavra idiomática, meu cérebro automaticamente conclui o pensamento como "idiomático para ..." - apenas o analiso em relação a um assunto específico.
fonte
collection.each do |current|
diferençaforeach(current in collection)
? Ambos são construções de loop definidascurrent
para cada elemento decollection
.Os idiomas geralmente são a melhor maneira possível de expressar uma situação comum e relativamente complexa em um idioma. Incrementar não é um idioma nem nada do tipo. Usando incremento de prefixo em vez de postfix, você pode argumentar ser um idioma C ++.
Os idiomas são a melhor maneira de usar um idioma, conforme determinado por usuários especializados. Um idioma C ++ real seria um objeto de função. Outro idioma seria RAII. Não há nada no idioma dizendo que você deve liberar recursos no destruidor. Mas é idiomático fazê-lo. Outro exemplo é o de modelos - é idiomático usar modelos para, bem, tudo o que você pode, mas não há nada que o impeça de usar a herança.
fonte
Sua definição não me parece correta. Um idioma é uma maneira de escrever algo que pode ou não ser possível em outros idiomas, mas que é comum nesse idioma. Geralmente, é mais curto que a alternativa, mas isso não é realmente um requisito.
Pode ser mais fácil explicá-lo falando sobre o que não é idiomático. No C ++, é bastante idiomático escrever:
É ainda mais idiomático escrever:
Esse código faz exatamente a mesma coisa - algumas pessoas que são novas no C ++ podem lê-lo como teste para ver se p é igual ao que a função retorna, mas não é isso que ele faz.
Compare com o que alguém pode escrever, de maneira não-linguística, que veio de outro idioma:
Você também verá essas coisas como não-idiomáticas:
Como a abordagem idiomática é
As formas não-idiomáticas não estão erradas, mas geralmente levam mais tempo para digitar e sempre para ler, para quem conhece os idiomas. Se eu te chamo de "o garoto que chorou lobo" e você conhece a história, é mais rápido do que se eu explique sobre como os alarmes falsos fazem com que as pessoas o ignorem. O problema, é claro, é se você não conhece a história e não sabe o que os lobos têm a ver com o que estamos falando. Da mesma forma, pode ser um problema se você nunca viu
return x<y;
antes e realmente não sabe o que faz.fonte
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Quando existem várias maneiras de expressar algo, a maneira mais comum ou comumente aceita. Por exemplo, usando uma instrução estruturada em C em vez do equivalente exato usando instruções goto.
fonte