En un reciente Dot Net Rocks podcast, Jon Skeet mencionó posibles abusos de la sintaxis LINQ. ¿Qué ejemplos ha visto la gente donde se están haciendo cosas locas con LINQ?¿Cuál es el peor abuso que has visto de la sintaxis de LINQ?
Respuesta
Aquí están my own abuses - por el simple hecho de reírse de una noche geek, y demostrar lo que el compilador realmente hace con las expresiones de consulta.
Podría decirse que mi "LINQ to Mandelbrot" es un poco abusiva también :)
Estaba pensando sobre todo en el abuso de la sintaxispor cierto, pero siempre hay un montón de formas de abusar de la misma presencia de LINQ - hacer las cosas "el modo LINQ" cuando hay enfoques más simples disponibles sin usar LINQ. Por ejemplo, conseguir que el elemento n
º de una matriz:
// Sensible (we know that people implements IList<Person>)
Person x = people[10];
// Insane
Person y = people.Skip(9).First();
sospecho que habrá más casos de abuso como éste que abusar del poder de las expresiones de consulta, en parte debido a que muchos desarrolladores no se darán cuenta de que abusar de consulta las expresiones incluso funcionarán :)
Tiene que ser un ray-tracer implemented in a single LINQ expression. ¡Inteligente, hermoso y atemorizante todo al mismo tiempo!
El hecho de que sea todo en una sola expresión da miedo, pero posiblemente si se dividiera en expresiones separadas (lo cual es fácilmente factible debido a la capacidad de compilación) podría ser inteligente, la forma más bella y legible de implementar un ray-tracer. Tal vez. Los tipos anónimos pueden herirlo, en verdad. –
No estoy seguro de qué decir. Por un lado, es un abuso insano de la sintaxis del lenguaje. Por otro lado, alguien obviamente sabía lo que estaba haciendo y está haciendo alarde de un talento que pocas personas tienen. –
verdad, que tiene que haber casos en que la gente eligió la sintaxis de LINQ en el que el código para hacerlo:
- fue igual o más largo que un simple bucle
- no ofreció un rendimiento o ventaja corrección (lectura/mantenimiento) durante un lazo simple
Uno de los "mejores" que he visto en mi vida es de thedailywtf.com
public string LastSixDigits
{
get
{
if (string.IsNullOrWhiteSpace(this.Number) || this.Number.Length < 6)
return string.Empty;
return this.Number.Reverse().Take(6).Reverse().Aggregate(string.Empty, (s, c) => s += c);
}
}
- 1. ¿La peor brecha de conocimiento técnico que ha visto?
- 2. ¿Cuál es la clase de constructor de toString más agradable que has usado o visto? Lo que lo hizo agradable
- 3. Cuál es la expresión regular más larga que ha visto
- 4. ¿Cuál es la forma mejor diseñada que jamás haya visto?
- 5. ¿Cuál es el programa más incorrecto que has tenido que mantener?
- 6. ¿Hibernate es peor que NHibernate?
- 7. ¿Cuál es el uso de la sintaxis = =?
- 8. ¿Cuál es el peor accidente de base de datos que le haya sucedido en la producción?
- 9. ¿Cuál es el significado de esta sintaxis?
- 10. PLINQ realiza peor de lo habitual LINQ
- 11. ¿Cuál es la sintaxis de ORDERBY en el LINQ de VB.NET?
- 12. El mejor truco de C# LINQ/Lambdas que alguna vez has sacado?
- 13. IBO peor que GL_TRIANGLE_STRIP?
- 14. ¿Cuál es el uso más inteligente del repositorio de fuentes que haya visto alguna vez?
- 15. ¿Cuál es el ayudante de cadenas más útil que has encontrado?
- 16. Entender la sintaxis de LINQ
- 17. ¿Cuál es la pieza de código más importante que has escrito y cómo te acercas?
- 18. ¿Cuál es el mejor proyecto de inteligencia artificial del que has oído hablar?
- 19. ¿Cuál es la mejor manera de manejar el contenido html generado por el usuario que será visto por el público?
- 20. Inversión de la peor inversión
- 21. C++ extraña sintaxis visto en la plantilla Boost parámetros
- 22. ¿Qué interfaces fluidas has creado o visto en C# que fueron muy valiosas? ¿Qué fue tan bueno acerca de ellos?
- 23. ¿Qué es lo que es peor: reflexión o boxeo?
- 24. ¿De qué manera Mercurial es mejor/peor que TFS?
- 25. inyección de CSS: ¿qué es lo peor que puede pasar?
- 26. ¿Cuál es la sintaxis `& ::` en LESS CSS?
- 27. ¿Cuál es la "sintaxis revisada" en OCaml?
- 28. ¿Este abuso de la metaprogramación de ruby?
- 29. ¿Cuál es la declaración LINQ más impresionante que ha encontrado?
- 30. ¿Alguna vez has visto este raro comportamiento/error de JavaScript de IE?
¿Por qué alguien alguna vez haría Skip.First cuando podrían hacer ElementAt? ;) –
En el lado opuesto de la moneda, hay personas que piensan que las expresiones de consulta son la única forma de usar una base de datos. http://stackoverflow.com/q/16904331/34397 – SLaks