Hola Angel (Tanto tiempo!!), Hola Guillermo (De todo corazón espero
que estén lo mejor posible de tu lado de la cordillera)
Los métodos que necesitás, ya están todos:
- - aColl select: [....projection....] "un bloque que tome un
element de la
- - colección y devuelva el elemento de la colección nueva que se
esta formando"
eso hace el #collect: aBlock (En realidad te devuelve una collection
nueva, que es el resultado de aplicar el bloque a cada elemento de la
receptora)
- - aColl selectFirst: [....projection....]
#first (Hagamos la salvedad de que se trate de una coleccion con
orden)
- - aColl where: [... critera...] "un bloque que tome un element de
la coleccion
- - y devuelva verdadero o falso"
es el famoso #select: aBlock
. . aColl orderBy: [.... order criteria ...]
#asSortedCollection: aSortBlock (el sortBlock especifica el criterio
de orden)
- - aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los
proximos 20"
Te lo dejo como ejercicio para hacer en el desayuno
Guillermo, con respecto a lo del Stream cursor:
La principal ventaja de los cursores cuando usamos SQL, es la de no
traer a memoria todos los objetos (registros, perdón), y en cambio,
recorrerlos en la misma base de datos, el cursor sólo "recuerda" la
posición del próximo elemento y sabe como avanzar y eventualmente
retroceder.
Si la collection ya está en memoria, como es el caso para una
collection standar de un Smalltalk standar, no hay razones para que
estos métodos creen cursores, si se crea una nueva collection, solo
tendrá referencias a los objetos de la original, y esto no es muy
costoso.
Ahora, si realmente querés un "cursor", no por una cuestión de
"economía" de espacio sino porque lo que querés es que realmente opere
sobre esa collection (y no sobre sus elementos) los Streams de
Smalltalk cumplen ese rol perfectamente, el protocolo no es el mismo
que el de Collection pero no es tan costoso "adaptarlo".
Saludos,
Claudio
On 26 feb, 01:23, Guillermo Schwarz <[email protected]>
wrote:
> La idea de Angel está interesante.
>
> aColl select: [....projection....] "un bloque que tome un element de la
> colección y devuelva el elemento de la colección nueva que se esta formando"
> aColl selectFirst: [....projection....]
> aColl where: [... critera...] "un bloque que tome un element de la coleccion
> y devuelva verdadero o falso"
> aColl orderBy: [.... order criteria ...]
> aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los proximos 20"
>
> Cada uno de esos debe retornar un collectionStream que sea algo así como un
> cursor, pero que tenga el mismo protocolo de un collection de modo que sea
> un drop in replacement de collection y que permita operar como si fuera un
> pipe a un collection.
>
> Entonces si collectionStream implementa el mismo protocolo de collection
> descrito arriba, se puede armar sentencias SQL sin necesidad de escribir
> SQL, y hacer un interprete de SQL se volvería trivial...
>
> Saludos,
> Guillermo.
>
> 2010/2/25 Mariano Martinez Peck <[email protected]>
>
>
>
>
>
> > Perdón que me vaya un poco offtopic, pero justo hoy Lukas hizo un post
> > interesante:
>
> >http://www.lukas-renggli.ch/blog/petitparser-1
>
> > saludos
>
> > Mariano
>
> > 2010/2/25 Angel "Java" Lopez <[email protected]>
>
> > Hola gente!
>
> >> Gracias por los enlaces, ya agregados a
> >>http://delicious.com/ajlopez/smalltalk
>
> >> Hay varios Object Query Language en otras tecnologías, y son bastante
> >> usados. Uno de los mas populares es Linq, de .NET, que a veces se extrania
> >> en Java.
>
> >> Una estrategia a seguir: permitir que cada query definida en el lenguaje
> >> de
> >> consulta, se pueda ejecutar con métodos agregados a colecciones de
> >> objetos,
> >> tipo (imagino en el aire)
>
> >> aColl select: [....projection....] "un bloque que tome un element de la
> >> colección y devuelva el elemento de la colección nueva que se esta
> >> formando"
> >> aColl selectFirst: [....projection....]
> >> aColl where: [... critera...] "un bloque que tome un element de la
> >> coleccion
> >> y devuelva verdadero o falso"
> >> aColl orderBy: [.... order criteria ...]
> >> aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los proximos
> >> 20"
>
> >> Supongo que debe haber algo asi ya escrito en librerías de Smalltalk, y en
> >> la propia librería base, cuales eran? Hmm... me patina la neurona... :-)
>
> >> Y luego recién ahí, implementar una gramatica para otro lenguaje mas OQL,
> >> SQL
>
> >> Nos leemos!
>
> >> Angel "Java" Lopez
> >>http://www.ajlopez.com/
> >>http://twitter.com/ajlopez
>
> >> -----Mensaje original-----
> >> De: [email protected] [mailto:[email protected]
> >> ]
> >> En nombre de GallegO
> >> Enviado el: jueves, 25 de febrero de 2010 12:49
> >> Para: [email protected]
> >> Asunto: Re: [clubSmalltalk] ATParserCompiler
>
> >> Hola:
>
> >> No te olvides de ver la página de SmaCC
>
> >>http://www.refactory.com/Software/SmaCC/index.html
>
> >> Un compañero que entiende como definir la gramatica usa el de Dolphin
> >> y anda perfecto.
>
> >> Ahora, escribir SQL para consultar colecciones de objetos???? Cada
> >> loco con su tema jaja :)
>
> >> Saludos
> >> GallegO
>
> >> --
> >> To post to this group, send email to [email protected]
> >> To unsubscribe from this group, send email to
> >> [email protected]<clubsmalltalk%2bunsubscr...@googlegroups.com>
>
> >>http://www.clubSmalltalk.org
> >> No virus found in this incoming message.
> >> Checked by AVG -www.avg.com
> >> Version: 8.5.435 / Virus Database: 271.1.1/2707 - Release Date: 02/24/10
> >> 07:34:00
>
> >> --
> >> To post to this group, send email to [email protected]
> >> To unsubscribe from this group, send email to
> >> [email protected]<clubsmalltalk%2bunsubscr...@googlegroups.com>
>
> >>http://www.clubSmalltalk.org
>
> > --
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]<clubsmalltalk%2bunsubscr...@googlegroups.com>
>
> >http://www.clubSmalltalk.org
>
> --
> Saludos cordiales,
>
> Guillermo Schwarz
> Sun Certified Enterprise Architect- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
http://www.clubSmalltalk.org