linq - net - convenciones de codigo c#
¿Por qué el método LINQ "aplicar para todos" se llama Seleccionar? (3)
Una de las principales razones por las que Select viene último es hacer que Intellisense funcione. Al poner en primer lugar la fuente de la secuencia (de la declaración), Intellisense puede funcionar correctamente.
Cuando leo el código que usa Select
, creo que "select-all-where". Cuando leo un código que usa el Map
, pienso "esto a eso" o "aplicar para todos". No puedo ser la única persona que siente el nombre Select
es confuso.
Es realmente idéntico al mapa de los lenguajes funcionales. La razón por la que se llama Select
es que está diseñado para ser utilizado como parte de LINQ que usa palabras clave similares a SQL.
from item in collection
where item.Value == someValue
select item.Name
se traduce a:
collection.Where(item => item.Value == someValue)
.Select(item => item.Name)
sería un poco inconsistente si Select
se llamara Map
; algo como:
collection.Filter(item => item.Value == someValue)
.Map(item => item.Name)
De hecho, muchas personas usan LINQ sin haber oído hablar de programación funcional en absoluto. Para ellos, LINQ es un método para recuperar objetos de datos y consultarlos fácilmente (como las consultas SQL). Para ellos, Select
y Where
tienen perfecto sentido. Mucho más que Map
and Filter
.
Al principio, Select
pareció un poco confuso también, pero solo era cuestión de tiempo. Mehrdad te dice una buena razón para Select
. Aparte de eso, creo que Select
transmite el aspecto de inmutabilidad de Linq
mucho mejor. No es que Map
signifique que está mutando la estructura original, pero Select
dice mucho más claro. Le dice que no está tocando la lista original, sino que simplemente selecciona de ella para formar otra lista.
Va con otros nombres y también con Where
. Cuando llamas a collection.Filter
te da una idea de que estás filtrando en esa colección en particular, o al menos la primera vez. Al final, todo es cuestión de familiarizarse. Aunque al principio estaba tan molesto por las nomenclaturas de Linq
, ahora siento que el equipo de MS lo ha logrado de la manera más correcta.