Me interesarían algunos ejemplos de C# antes y después, algunos ejemplos idiomáticos y no idiomáticos. Los ejemplos que no sean C# también estarían bien si transmiten la idea. Gracias.¿Qué es el código idiomático?
Respuesta
Idiomático significa seguir las convenciones del idioma. Desea encontrar las formas más sencillas y comunes de realizar una tarea en lugar de trasladar su conocimiento desde un idioma diferente.
pitónno idiomática usando un bucle con append:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
pitón idiomática usando una lista por comprensión:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
El código idiomático es un código que realiza una tarea común de la manera común para su idioma. Es similar a un patrón de diseño, pero a una escala mucho más pequeña. Los modismos difieren ampliamente por idioma. Una expresión en C# podría ser utilizar un iterador para iterar a través de una colección en lugar de recorrerlo. Otros lenguajes sin iteradores pueden confiar en el idioma del bucle.
Algunos ejemplos:
gestión de recursos de, no idiomática:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
Idiomatic:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
Iteration, no idiomática:
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
también no idiomática:
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
Idiomatic:
foreach (Item item in list) {
DoSomething(item);
}
Filtrado, no idiomática:
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
idiomática:
var list2 = list1.Where(num=>num>100);
Las llaves son idiomáticas de Java ;-) –
En términos prácticos, esto significa que la escritura de código de una manera coherente, es decir, todos los desarrolladores que trabajan en su base de código deben seguir las mismas convenciones al escribir construcciones de código similares.
Así que la forma idiomática es la que coincide con el estilo del otro código, la forma no idiomática significa que está escribiendo el tipo de función pero de una manera diferente.
p. Ej. Si se recorre un cierto número de elementos, se podría escribir el bucle de varias maneras:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
etc
Lo que es más importante es que el estilo elegido se utiliza constantemente. De esta forma, la gente se familiarizará con la forma de usarla y se sentirá segura de sí misma, y cuando ve un uso que se ve diferente, puede ser una señal de que se ha introducido un error, por ejemplo, un error "por un error", p.
for (int i = 1; i < itemCount; i++)
Creo que pensé que idiomático significaba "la mejor manera" en lugar de simplemente un estándar arbitrario. Pero creo que la mejor manera está sujeta al contexto. – MrBoJangles
En PHP a veces me encuentro con un código como:
foreach ($array as $value) {
$trimmed[] = trim($value);
}
return $trimmed;
Qué idiomáticamente puede ser implementado con:
return array_map('trim', $array);
- 1. Buenos ejemplos de código scala idiomático
- 2. Cómo aprender a escribir código C++ idiomático
- 3. ¿Qué es el código nativo?
- 4. idiomático IO con Scala
- 5. idiomático Scala Mapa upsert
- 6. F # y ADO.NET - idiomático F #
- 7. Reemplazo idiomático para tipos existenciales
- 8. Idioma idiomático extraño: ¿qué hace "/xyz/.test(function(){xyz;})"?
- 9. Uso idiomático de std :: rel_ops
- 10. ¿Qué es el análisis de código estático?
- 11. ¿Esto se consideraría idiomático ClojureScript?
- 12. ¿Qué es idiomático Clojure para "eliminar" una sola instancia de muchas en una lista?
- 13. ¿Este código es un exploit? ¿Qué es este código?
- 14. ¿Qué código es más legible?
- 15. Clojure idiomático para informes de progreso?
- 16. Función de modo idiomático en Clojure
- 17. Idiomático Clojure para resolver el algoritmo de programación dinámica
- 18. ¿Cuál es el equivalente idiomático de las estructuras C en Lisp?
- 19. El código es heurísticamente inalcanzable
- 20. bloqueo de archivo idiomático en clojure?
- 21. Es el código "while (condition);" válido y ¿qué significa?
- 22. ¿Por qué mi Repeater es nulo en el código?
- 23. ¿Qué es el código de estado HTTP 000?
- 24. ¿Por qué el código de Moose es tan lento?
- 25. ¿Qué es esto de "foo. (Bar.Baz)" en el código Go?
- 26. ¿Por qué es tan fácil descompilar el código .NET IL?
- 27. ¿Qué es el "código de nivel de producción"?
- 28. ¿Por qué el siguiente código scala es válido?
- 29. ¿Qué tan portátil es el código de Silverlight para WPF?
- 30. ¿Qué es el código de carácter HTML 8203?
¿Cómo consigo un negativo, esta es una buena pregunta maldito! – MrBoJangles
De acuerdo, buena pregunta con algunas buenas respuestas. –
[Funciones ocultas de C#] (http://stackoverflow.com/q/9033/4830) está lleno de C# idiomático. No todo esto te importa, pero muchos de los simples de una línea con un alto número de upvotes podrían considerarse idiomáticos. Y algunas respuestas describen las alternativas no idiomáticas también. –