remarks example cref c#

example - remarks c#



¿Qué es el código idiomático? (5)

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.


El código idiomático es un código que hace 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.


En términos prácticos, significa escribir código de manera consistente, 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 que coincide con el estilo del otro código, la forma no idiomática significa que estás escribiendo el tipo de función pero de una manera diferente.

por ejemplo, si está bucleando una cierta cantidad de elementos, puede escribir el ciclo 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 más importante es que el estilo elegido se use de forma coherente. De esta forma, la gente se familiarizará con la forma de usarlo y se sentirá segura de sí misma, y ​​cuando se detecta un uso que se ve diferente, puede ser un signo de error, tal vez un error de apagado, por ejemplo

for (int i = 1; i < itemCount; i++)


Idiomático significa seguir las convenciones del lenguaje. Desea encontrar las formas más sencillas y comunes de realizar una tarea en lugar de trasladar su conocimiento desde un idioma diferente.

Python no idiomático usando un loop con append:

mylist = [1, 2, 3, 4] newlist = [] for i in mylist: newlist.append(i * 2)

Pitón idiomático utilizando una lista de comprensión:

mylist = [1, 2, 3, 4] newlist = [(i * 2) for i in mylist]


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);


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);