Je serais intéressé par quelques exemples de C# avant-après, certains exemples non-idiomatiques vs idiomatiques. Des exemples non-C# seraient bien aussi s'ils ont l'idée de l'autre côté. Merci.Qu'est-ce qu'un code idiomatique?
Répondre
Idiomatique signifie suivre les conventions du langage. Vous voulez trouver les moyens les plus simples et les plus courants d'accomplir une tâche plutôt que de transférer vos connaissances d'une langue différente.
python non idiomatiques en utilisant une boucle avec append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
python idiomatiques en utilisant une compréhension de la 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 même manière que votre langue. C'est semblable à un modèle de conception, mais à une échelle beaucoup plus petite. Les idiomes diffèrent largement par la langue. Un idiome en C# pourrait être d'utiliser un itérateur pour parcourir une collection plutôt que de la parcourir. Les autres langages sans itérateurs peuvent s'appuyer sur l'idiome de la boucle.
Quelques exemples:
Gestion des ressources, non idiomatiques:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
idiomatiques:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
Iteration, non idiomatiques:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
également non idiomatiques:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
idiomatiques:
foreach (Item item in list) {
DoSomething(item);
}
Filtrage, non idiomatiques:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
idiomatiques:
var list2 = list1.Where(num=>num>100);
Les accolades sont idiomatiques Java ;-) –
En pratique, cela signifie que le code écrit de manière cohérente, à savoir tous les développeurs qui travaillent sur votre base de code devraient suivre les mêmes conventions lors de l'écriture de constructions de code similaires.
Ainsi, la manière idiomatique correspond au style de l'autre code. Une manière non-idiomatique signifie que vous écrivez le type de fonction mais de manière différente.
par exemple. si vous Looping un certain nombre d'éléments, vous pouvez écrire la boucle de plusieurs façons:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
etc
Ce qui est le plus important est que le style choisi est utilisé de manière cohérente. De cette façon, les gens deviennent très familiers et confiants avec la façon de l'utiliser, et quand vous espionnez une utilisation qui semble différente, cela peut être le signe d'une erreur introduite, peut-être une erreur par un, par exemple.
for (int i = 1; i < itemCount; i++)
Je suppose que je pensais que idiomatique signifiait "la meilleure façon" par opposition à un standard arbitraire. Mais je suppose que la meilleure façon de faire dépend du contexte. – MrBoJangles
En PHP je rencontre parfois du code comme:
foreach ($array as $value) {
$trimmed[] = trim($value);
}
return $trimmed;
Ce qui peut être mis en œuvre avec idiomatiques:
return array_map('trim', $array);
- 1. Fonction du mode idiomatique dans Clojure
- 2. Quelles sont les meilleures ressources pour apprendre l'écriture idiomatique C#?
- 3. Quel est l'équivalent mais plus idiomatique à eval() dans jQuery?
- 4. Quelle est la manière la plus idiomatique de Ruby d'écrire ceci?
- 5. Dans Clojure, est-il idiomatique correct d'utiliser require ... plutôt que d'utiliser ... dans la macro ns
- 6. Convertir le code JavaScript en code VBScript?
- 7. Lecteur de code-barres Delphi Code
- 8. code vb équivalent pour un code java
- 9. Comment puis-je réduire ce code Ruby/Rails très répétitif?
- 10. Code Curiosité
- 11. Code Obfuscation?
- 12. Code Randomization
- 13. Canonique/Idiomatique "faire ce que je veux dire" quand passé une chaîne qui pourrait un nom de fichier, URL, ou les données réelles à travailler
- 14. Comment exclure le code MFC de l'analyse de code VS2008
- 15. Test d'intégration Code C++ de NUnit dans le code managé
- 16. Echapper du code XML vers le code ActionScript 3
- 17. Indicateurs de code VS2008 Team Edition - Ignorer le code généré?
- 18. Comment convertir le code C# en code objet?
- 19. Convertir le code C# suivant en code java?
- 20. Différence entre le code natif et le code managé?
- 21. Charger le code javascript après le chargement du code derrière
- 22. Code généré par le compilateur dans la couverture de code
- 23. meilleur outil pour le code-Analyzement ou code-Review
- 24. Un programme d'édition de code simulé pour le code C#
- 25. Traduire le code Java en code PHP (13 lignes)
- 26. Comment convertir le code Java en code C#?
- 27. génération de code C#/suppression de code redondant
- 28. Code pour créer du code CAPTCHA dans ASP.NET?
- 29. comment appeler le code de gestionnaire d'événements de code javascript
- 30. Comment convertir le code source Php en code Asp.net
Comment puis-je obtenir un négatif, c'est une sacrément bonne question! – MrBoJangles
D'accord, bonne question avec quelques bonnes réponses. –
[Les fonctionnalités cachées de C#] (http://stackoverflow.com/q/9033/4830) sont pleines de C# idiomatiques. Cela ne vous dérange pas tous, mais la plupart des simples doublures avec un nombre élevé de upvotes pourraient être considérées idiomatiques. Et certaines réponses décrivent également les alternatives non-idiomatiques. –