Je comprends qu'un "idiome" est une opération ou un modèle courant qui, dans une langue particulière, n'est pas simplifié par la syntaxe du langage de base, comme l'incrément entier:
i = i + 1;
En C ++, cet idiome est simplifié par un opérateur:
++i;
Cependant, lorsque quelqu'un utilise le terme "idiomatique", je ne sais pas comment le comprendre. Qu'est-ce qui rend un morceau de code "idiomatique"?
Réponses:
Une façon idiomatique d'écrire du code consiste à l'écrire de manière très spécifique en raison d'idiomes spécifiques à une langue que d'autres langues n'ont pas.
Par exemple, en C ++, l'exploitation de l'idiome RAII conduit à des façons d'écrire du code C ++ gérant des ressources idiomatiques.
Un autre exemple serait d'utiliser des compréhensions de liste en Python pour générer des listes. C'est idiomatique parce que vous auriez utilisé la compréhension de liste en Python idiomatique mais vous auriez pu faire la même chose en utilisant une fonction de générateur dans n'importe quel autre langage ou même en Python.
Souvent, quelqu'un qui essaie une nouvelle langue sans utiliser les idiomes spécifiques à cette langue n'écrira pas de code idiomatique.
la source
TryAdd()
sur laDictionary
classe Generic pour vérifier d'abord!Contains()
, puis appelerAdd()
, ce serait idiomatique? J'utilise une fonctionnalité spécifique aux méthodes d'extension C #.Définition normale
Définition de la programmation
la source
L'idiomatique dans le contexte de la programmation peut généralement être défini comme «la manière la plus naturelle d'exprimer quelque chose dans une langue»
Je vois que le mot idiomatique revient beaucoup en Ruby. Dans Ruby, il existe d'énormes capacités de méta-programmation, et pour écrire du code Ruby idiomatique, vous devez généralement les utiliser.
Notez que ce n'est pas parce qu'un morceau de code est idiomatique qu'il est propre ou même concis. Plusieurs fois, vous devez faire des compromis.
Donc, fondamentalement, idiomatique se réfère le plus souvent à la façon la plus courante d'écrire quelque chose dans une langue, souvent en incluant "l'argot" (idiomes). Si un morceau de code n'est pas idiomatique, il peut être parfaitement lisible, concis, propre et correct, mais il peut sembler / sembler gênant dans la langue utilisée. C'est une préférence de goût de savoir si la réécriture idiomatique d'un tel morceau de code serait réellement une bonne chose et doit être jugée au cas par cas.
L'anglais idiomatique par exemple peut dépendre de la région. L'utilisation du mot
bum
est probablement requise pour l'anglais britannique idiomatique, maisbutt
est plus appropriée pour l'anglais américain. (Je ne connais pas beaucoup l'anglais britannique malheureusement: /)la source
Le meilleur exemple que je puisse imaginer, du haut de ma tête, pour quelque chose qui est idiomatique, vient de Ruby.
Dans une multitude de langues, vous pouvez répéter avec:
Ou quelque chose de très similaire. De nombreuses langues ont également une
foreach(x in SetOfXes)
construction. Mais l'itération qui est idiomatique pour Ruby comprend des choses comme:et même
Je les vois comme idiomatiques parce qu'ils représentent une façon de faire quelque chose qui est moins commun, et qui représente quelque chose au cœur de la philosophie de son domaine. Ruby a une philosophie d'interaction avec des objets qui, bien que n'étant pas unique, n'est pas omniprésente.
Sur une note sémantique, chaque fois que j'entends le mot idiomatique, mon cerveau achève automatiquement la pensée comme "idiomatique à ..." - Je l'analyse par réflexe comme se rapportant à un sujet spécifique.
la source
collection.each do |current|
différent deforeach(current in collection)
? Les deux sont des constructions de boucles qui sont définiescurrent
pour chaque élément decollection
.Les idiomes sont généralement la meilleure façon d'exprimer une situation commune et relativement complexe dans une langue. L'incrémentation n'est pas un idiome ou quelque chose du genre. En utilisant l'incrément de préfixe au lieu de postfix, vous pourriez prétendre être un idiome C ++.
Les idiomes sont le meilleur moyen d'utiliser une langue, tel que déterminé par les utilisateurs experts. Un véritable idiome C ++ serait des objets de fonction. Un autre idiome serait RAII. Rien dans le langage ne vous dit que vous devez libérer des ressources dans le destructeur. Mais c'est idiomatique de le faire. Un autre exemple est celui des modèles - il est idiomatique d'utiliser des modèles pour tout ce que vous pouvez, mais rien ne vous empêche de sur-utiliser l'héritage.
la source
Votre définition ne me semble pas correcte. Un idiome est un moyen d'écrire quelque chose qui peut ou non être possible dans d'autres langues, mais qui est courant dans cette langue. Habituellement, c'est plus court que l'alternative, mais ce n'est pas vraiment une exigence.
Il pourrait être plus facile de l'expliquer en parlant de ce qui n'est pas idiomatique. En C ++, c'est assez idiomatique d'écrire:
C'est encore plus idiomatique d'écrire:
Ce code fait exactement la même chose - certaines personnes qui débutent en C ++ peuvent le lire comme un test pour voir si p est égal à ce que renvoie la fonction, mais ce n'est pas ce qu'il fait.
Comparez ce que quelqu'un pourrait écrire, de façon très non idiomatique, qui est venu d'une autre langue:
Vous verrez également ce truc comme non idiomatique:
Parce que l'approche idiomatique est
Les manières non idiomatiques ne sont pas mauvaises, mais elles prennent généralement plus de temps à taper et elles prennent toujours plus de temps à lire, pour ceux qui connaissent les idiomes. Si je vous appelle "le garçon qui a crié au loup" et que vous connaissez l'histoire, c'est plus rapide que si je vous explique comment les fausses alarmes font que les gens vous ignorent. Le problème, bien sûr, est que si vous ne connaissez pas l'histoire et ne savez pas ce que les loups ont à voir avec ce dont nous parlons. De même, cela peut être un problème si vous ne l'avez jamais vu
return x<y;
auparavant et que vous ne savez vraiment pas ce qu'il fait.la source
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Lorsqu'il existe plusieurs façons d'exprimer quelque chose, la manière la plus courante ou communément acceptée. Par exemple, en utilisant une instruction structurée en C au lieu de l'équivalent exact en utilisant des instructions goto.
la source