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 transmettaient l'idée. Merci.
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 dans une langue différente.
non idiomatique python utilisant une boucle avec append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
idiomatique python en utilisant une compréhension de liste:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
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]);
}
Également 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);
Le code idiomatique est un code qui effectue une tâche commune de la même manière pour votre langue. C'est semblable à un modèle de conception, mais à une échelle beaucoup plus petite. Les idiomes 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 langues sans itérateurs peuvent s'appuyer sur l'idiome de boucle.
Dans 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);
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 sur 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 d'une erreur, par exemple.
for (int i = 1; i < itemCount; i++)