Anders Norås ha creado una implementación de LINQ en Java; LINQ es una de las novedades de la tercera versión de .NET. Es un lenguaje declarativo para realizar consultas sobre colecciones de datos que se encuentran en memoria de un modo bastante similar a como en la actualidad se realizan consultas SQL sobre una base de datos.
Por ejemplo, podríamos hacer una consulta tipo: "from myColection where customer.money > 10.000 select *" donde myColection sería cualquier colección del framework de Colections. Y sí, esa es la sintaxis que se usa; no es que no sepa hacer consultas SQL. Intencionadamente Microsoft invirtió el orden de los parámetros para que los desarrolladores sean conscientes cuando están haciendo una consulta contra una base de datos y cuando la están haciendo contra una colección de datos que está cargada en memoria.
Quare es una implementación de LINQ sobre Java. Todavía no está terminado, pero ya es funcional y es capaz de ejecutar los ejemplos que Microsoft usa para su tecnología.
¿Qué os parecen Quare y LINQ?
Etiquetas: j2se, j2se, LINQ, quare
No conocia LINQ, pero la idea es buena
Bueno, JXPath hace algo similar, pero con XPath en lugar de SQL. Yo lo he utilizado para trabajar con metadatos y, realmente me ha facilitado mucho la tarea. Pero el problema lo veo a la hora de refactorizar el código.
El proyecto JoSQL hace algo parecido pero el lenguaje de consultas es diferente.
No entiendo cual seria la ventaja de este sobre cualquier base de datos embebida, en memoria.
Supongo que es por que no conozco LINQ.
Es mas sencillo?
Una de las ventajas es que se puede aplicar sobre cualquier cosa que implemente IEnumerable, además es muy intuítivo, a mi me parece muy bueno. Internamente se resuelve en tiempo de compilación, el compilador crea los métodos anónimos para hacer las búsquedas. También permite utilizar expresiones Lambda para hacer más compáctas las consultas.
Leonardo.
http://leomicheloni.blogspot.com
Es curioso que Microsoft ha tratado de vender a LinkQ como una gran característica, algo revolucionario que podría poner a Java a temblar, y que nosotros lo veamos como algo simplemente útil, pero no la gran cosa. Ya me imaginaba yo que había implementaciones semejantes por ahí en nuestro mundillo javero y que realmente no era para tanto el gran alarido de Microsoft de "veanme, veanme".
En todo caso, que bueno que existan iniciativas como la de Anders Norås, porque si en un proyecto un programador .NET quiere poner como ventaja decisiva a LinkQ, simplemente indicamos que en Java solo es una opción mas.
Saludos.
"porque si en un proyecto un programador .NET quiere poner como ventaja decisiva a LinkQ, simplemente indicamos que en Java solo es una opción mas."
Realmente no tienen nada que ver esta implementación con Linq (no LinkQ), Quaere utiliza cadenas de texto para indicar el acceso a miembros de objetos y variables de iteracón, por ejemplo:
List products = Arrays.asList(Product.getAllProducts());
Iterable productNames = from("p")
.in(products)
.select("p.getProductName()");
Mientras que Linq utiliza expresiones lambda "first class" (quequeadas por el compilador) con inferencia de tipos, el mismo ejemplo en Linq:
List products = Product.GetAllProducts();
IEnumerable productName = from p in products
select p.ProductName;
El siguiente ejemplo de la noticia original es más interesante:
// En Quaere
String[] words = {"aPPLE", "BlUeBeRrY", "cHeRry"};
Iterable upperLowerWords = from("w")
.in(words)
.select( create( property("upper", "w.toUpperCase()"),
property("lower", "w.toLowerCase()") ) );
// En Linq
string[] words = {"aPPLE", "BlUeBeRrY", "cHeRry"};
var upperLowerWords = from w in words
select new {Upper = w.ToUpper(), Lower = w.ToLower()};
"No entiendo cual seria la ventaja de este sobre cualquier base de datos embebida, en memoria."
Cuando Linq se utiliza contra una BD (Linq to SQL), no lo hace contra objetos en memoria. En este caso, en lugar de compilar las expresiones lambda, las convierte en estructuras de datos de árbol, y las pasa a un "Provider" que puede ser implementado de la forma más optimizada para cada producto de BD.
"'from myColection where customer.money > 10.000 select *' donde myColection sería cualquier colección del framework de Colections. Y sí, esa es la sintaxis que se usa"
No, esa no es la sintaxis que se usa, para este caso sería "from customer in myCollection where customer.money > 10000 select customer".
"Intencionadamente Microsoft invirtió el orden de los parámetros para que los desarrolladores sean conscientes cuando están haciendo una consulta contra una base de datos y cuando la están haciendo contra una colección de datos que está cargada en memoria".
No, Microsoft invirtió el orden de los operadores relacionales (no son parámetros) para que el compilador sepa sobre qué conjunto de objetos aplicar el where o el select o cualquier otro operador, así como en Java o C# al poner "objeto.metodo()" ponemos primero "objeto" y después "metodo()", y no alrevés. Además una consulta en Linq es exactamente la misma si va contra Bases de Datos remotas, objetos en memoria, documentos XML, directorios LDAP o cualquier otra fuente de datos.
interesantes propuestas, me ha llamado mucho la atencion JoSQL, esta bastante bueno, tal vez lo utilice en mis proyectos.
http://www.volny.cz/celebrities/map.html best nude celebrities site http://www.volny.cz/celebrities/
Donde puedo descargar quaere???????
Excelente herramienta, nos ayuda a las consultas ahora a nivel aplicacion ya lo he probado, muy bueno recomendado
Escribe tu comentario