Je serais intéressé par quelques exemples c # avant et après, quelques exemples non idiomatiques vs idiomatiques. Les exemples non c # conviendraient également s'ils font passer l'idée. Merci.
Les fonctionnalités cachées de C # sont pleines de C # idiomatiques. Tout cela ne vous dérange pas, mais bon nombre des simples one-liners avec un nombre élevé de votes positifs pourraient être considérés comme idiomatiques. Et certaines réponses décrivent également les alternatives non idiomatiques.
Michiel van Oosterhout
Réponses:
119
Idiomatique signifie suivre les conventions de la langue. Vous souhaitez trouver les moyens les plus simples et les plus courants d'accomplir une tâche plutôt que de transférer vos connaissances à partir d'une autre langue.
python non idiomatique utilisant une boucle avec append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
python idiomatique utilisant une compréhension de liste:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
Le code idiomatique est un code qui effectue une tâche commune de la manière habituelle pour votre langue. C'est similaire à un modèle de conception, mais à une échelle beaucoup plus petite. Les expressions idiomatiques diffèrent considérablement selon la langue. Un idiome en C # pourrait être d'utiliser un itérateur pour parcourir une collection plutôt que de la parcourir en boucle. D'autres langages sans itérateurs peuvent s'appuyer sur l'idiome de boucle.
Concrètement, cela signifie écrire du code de manière cohérente, c'est-à-dire que tous les développeurs qui travaillent sur votre base de code doivent suivre les mêmes conventions lorsqu'ils écrivent des constructions de code similaires.
Donc, la manière idiomatique est la manière qui correspond au style de l'autre code, la manière non idiomatique signifie que vous écrivez le type de fonction mais d'une manière différente.
Par exemple, si vous bouclez un certain nombre d'éléments, vous pouvez écrire la boucle de plusieurs manières:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
etc
Le plus important est que le style choisi soit utilisé de manière cohérente. De cette façon, les gens deviennent très familiers et confiants quant à la façon de l'utiliser, et lorsque vous espionnez une utilisation qui semble différente, cela peut être le signe d'une erreur introduite, peut-être une erreur par une erreur, par exemple
Je suppose que je pensais que idiomatique signifiait «la meilleure façon» par opposition à une simple norme arbitraire. Mais je suppose que le meilleur moyen dépend du contexte.
Réponses:
Idiomatique signifie suivre les conventions de la langue. Vous souhaitez trouver les moyens les plus simples et les plus courants d'accomplir une tâche plutôt que de transférer vos connaissances à partir d'une autre langue.
python non idiomatique utilisant une boucle avec append:
mylist = [1, 2, 3, 4] newlist = [] for i in mylist: newlist.append(i * 2)
python idiomatique utilisant une compréhension de liste:
mylist = [1, 2, 3, 4] newlist = [(i * 2) for i in mylist]
la source
Quelques exemples:
Gestion des ressources , non idiomatique:
string content; StreamReader sr = null; try { File.OpenText(path); content = sr.ReadToEnd(); } finally { if (sr != null) { sr.Close(); } }
Idiomatique:
string content; using (StreamReader sr = File.OpenText(path)) { content = sr.ReadToEnd(); }
Itération , non idiomatique:
for (int i=0;i<list.Count; i++) { DoSomething(list[i]); }
Aussi non idiomatique:
IEnumerator e = list.GetEnumerator(); do { DoSomenthing(e.Current); } while (e.MoveNext());
Idiomatique:
foreach (Item item in list) { DoSomething(item); }
Filtrage , non idiomatique:
List<int> list2 = new List<int>(); for (int num in list1) { if (num>100) list2.Add(num); }
idiomatique:
var list2 = list1.Where(num=>num>100);
la source
Le code idiomatique est un code qui effectue une tâche commune de la manière habituelle pour votre langue. C'est similaire à un modèle de conception, mais à une échelle beaucoup plus petite. Les expressions idiomatiques diffèrent considérablement selon la langue. Un idiome en C # pourrait être d'utiliser un itérateur pour parcourir une collection plutôt que de la parcourir en boucle. D'autres langages sans itérateurs peuvent s'appuyer sur l'idiome de boucle.
la source
En PHP, je rencontre parfois du code comme:
foreach ($array as $value) { $trimmed[] = trim($value); } return $trimmed;
Qui peut être implémenté idiomatiquement avec:
return array_map('trim', $array);
la source
Concrètement, cela signifie écrire du code de manière cohérente, c'est-à-dire que tous les développeurs qui travaillent sur votre base de code doivent suivre les mêmes conventions lorsqu'ils écrivent des constructions de code similaires.
Donc, la manière idiomatique est la manière qui correspond au style de l'autre code, la manière non idiomatique signifie que vous écrivez le type de fonction mais d'une manière différente.
Par exemple, si vous bouclez un certain nombre d'éléments, vous pouvez écrire la boucle de plusieurs manières:
for (int i = 0; i < itemCount; i++) for (int i = 1; i <= itemCount; i++) for (int i = 0; i < itemCount; ++i)
etc
Le plus important est que le style choisi soit utilisé de manière cohérente. De cette façon, les gens deviennent très familiers et confiants quant à la façon de l'utiliser, et lorsque vous espionnez une utilisation qui semble différente, cela peut être le signe d'une erreur introduite, peut-être une erreur par une erreur, par exemple
for (int i = 1; i < itemCount; i++)
la source