Me interesaría algunos ejemplos de c # antes y después, algunos ejemplos no idiomáticos vs idiomáticos. Los ejemplos que no sean de C # también estarían bien si transmiten la idea. Gracias.
Las características ocultas de C # están llenas de C # idiomático. No todo eso le importa, pero muchas de las frases sencillas con una gran cantidad de votos positivos podrían considerarse idiomáticas. Y algunas respuestas también describen las alternativas no idiomáticas.
Michiel van Oosterhout
Respuestas:
119
Idiomático significa seguir las convenciones del idioma. Desea encontrar las formas más fáciles y comunes de realizar una tarea en lugar de transferir sus conocimientos de un idioma diferente.
Python no idiomático usando un bucle con agregar:
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
Python idiomático usando una lista de 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 menor. Los modismos difieren ampliamente según el idioma. Un modismo en C # podría ser usar un iterador para iterar a través de una colección en lugar de recorrerla. Otros lenguajes sin iteradores pueden depender del lenguaje de bucle.
En términos prácticos, significa escribir código de forma 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.
Entonces, la forma idiomática es la forma 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.
Por ejemplo, si está repitiendo un cierto número de elementos, puede escribir el bucle de varias formas:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
etc
Lo más importante es que el estilo elegido se utilice de forma coherente. De esa manera, las personas se familiarizan y se sienten más seguras de cómo usarlo, y cuando espías un uso que se ve diferente, puede ser una señal de que se está introduciendo un error, tal vez un error por un error, p.
Supongo que pensé que idiomático significaba "la mejor manera" en lugar de un estándar arbitrario. Pero supongo que la mejor forma está sujeta al contexto.
Respuestas:
Idiomático significa seguir las convenciones del idioma. Desea encontrar las formas más fáciles y comunes de realizar una tarea en lugar de transferir sus conocimientos de un idioma diferente.
Python no idiomático usando un bucle con agregar:
mylist = [1, 2, 3, 4] newlist = [] for i in mylist: newlist.append(i * 2)
Python idiomático usando una lista de comprensión:
mylist = [1, 2, 3, 4] newlist = [(i * 2) for i in mylist]
fuente
Algunos ejemplos:
Gestión de recursos , no idiomática:
string content; StreamReader sr = null; try { File.OpenText(path); content = sr.ReadToEnd(); } finally { if (sr != null) { sr.Close(); } }
Idiomático:
string content; using (StreamReader sr = File.OpenText(path)) { content = sr.ReadToEnd(); }
Iteración , no idiomática:
for (int i=0;i<list.Count; i++) { DoSomething(list[i]); }
También no idiomático:
IEnumerator e = list.GetEnumerator(); do { DoSomenthing(e.Current); } while (e.MoveNext());
Idiomático:
foreach (Item item in list) { DoSomething(item); }
Filtrado , no idiomático:
List<int> list2 = new List<int>(); for (int num in list1) { if (num>100) list2.Add(num); }
idiomático:
var list2 = list1.Where(num=>num>100);
fuente
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 menor. Los modismos difieren ampliamente según el idioma. Un modismo en C # podría ser usar un iterador para iterar a través de una colección en lugar de recorrerla. Otros lenguajes sin iteradores pueden depender del lenguaje de bucle.
fuente
En PHP, a veces encuentro código como:
foreach ($array as $value) { $trimmed[] = trim($value); } return $trimmed;
Que idiomáticamente se puede implementar con:
return array_map('trim', $array);
fuente
En términos prácticos, significa escribir código de forma 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.
Entonces, la forma idiomática es la forma 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.
Por ejemplo, si está repitiendo un cierto número de elementos, puede escribir el bucle de varias formas:
for (int i = 0; i < itemCount; i++) for (int i = 1; i <= itemCount; i++) for (int i = 0; i < itemCount; ++i)
etc
Lo más importante es que el estilo elegido se utilice de forma coherente. De esa manera, las personas se familiarizan y se sienten más seguras de cómo usarlo, y cuando espías un uso que se ve diferente, puede ser una señal de que se está introduciendo un error, tal vez un error por un error, p.
for (int i = 1; i < itemCount; i++)
fuente