Cuando leo el código que usa Select
, pienso "select-all-where". Cuando leo código que usa Map
, pienso "esto a eso" o "aplicar para todos". No puedo ser la única persona que siente que el nombre Select
es confuso.¿Por qué el método LINQ "aplicar para todos" se llama Seleccionar?
Respuesta
Es realmente idéntico al mapa de los lenguajes funcionales. La razón por la que se llama Select
es que está diseñada para ser utilizada como parte de LINQ que utiliza 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
fue nombrado Map
; algo así como:
collection.Filter(item => item.Value == someValue)
.Map(item => item.Name)
De hecho, muchas personas utilizan LINQ sin haber oído hablar de la 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 mucho sentido. Mucho más que Map
y Filter
.
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.
¿cómo se relaciona esto con la pregunta? – nawfal
Al principio Select
me pareció un poco confuso también, pero era solo cuestión de tiempo. Mehrdad le 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
significara que está mutando la estructura original, pero Select
lo 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 así como Where
. Cuando llamas al 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 Linq
, ahora siento que el equipo de MS lo tiene más correcto.
+1 para "' Seleccionar 'lo dice mucho más claro ". Uno tiene que pensar fuera de la sintaxis de SQL. – nrodic
- 1. ¿Por qué el archivo se llama catalina.out?
- 2. ¿Por qué se llama nillable?
- 3. ¿Qué método de actividad se llama primero?
- 4. ¿Por qué se llama onBlur?
- 5. ¿Por qué se llama RAII?
- 6. ¿Por qué se llama BSON?
- 7. ¿Por qué se llama 'Cadena'?
- 8. Cómo aplicar tema para seleccionar
- 9. ¿Cuándo se llama a OnValidate en Linq?
- 10. ¿Por qué se llama al método de clase base si la clase derivada anula el método?
- 11. ¿Por qué no se llama a Application.OnStartup?
- 12. El método "clickedButtonAtIndex:" delegado no se llama
- 13. El método Objective-C no se llama
- 14. ¿Por qué contextInitialized() se llama varias veces?
- 15. ¿Por qué el verbo HTTP POST se llama POST?
- 16. ¿Por qué paint()/paintComponent() nunca se llama?
- 17. LINQ para seleccionar últimos registros
- 18. ¿Cuándo se llama el método layoutSubviews?
- 19. ¿por qué textFieldDidEndEditing: no se llama?
- 20. ¿Por qué se llama .NET .NET?
- 21. ¿Qué significan todos estos parámetros cuando se llama a un método web WCF de Anguila JavaScript?
- 22. ¿Por qué se llama una pseudo clase?
- 23. ¿Por qué se llama AJAX asincrónico?
- 24. ¿Por qué mi destructor nunca se llama?
- 25. NSFilePresenter -presentedSubitemDidAppearAtURL: el método nunca se llama
- 26. ¿cuándo se llama el método dealloc?
- 27. ¿Por qué Node.js se llama Node.js?
- 28. ¿Por qué onKey() se llama dos veces?
- 29. ¿Por qué __PRETTY_FUNCTION__ se llama __PRETTY_FUNCTION__?
- 30. ¿Por qué before_save no se llama para mi modelo ActiveRecord?
Tiene todo el sentido. Si realmente me importa tanto, podría ajustar 'Where' y' Select' en los métodos de extensión. – ChaosPandion
Buena respuesta. De hecho, utilicé "Seleccionar" sin LINQ, pero es mucho más claro como una expresión LINQ. – willem
Gracias, gran respuesta. Fuera de contexto, no tiene ningún sentido, pero esto ayuda a explicarlo. – nsantorello