Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Al, por cierto

Cita:
... del tipo TEnumProcResult, pero en cuanto tenga que usarlo no dudaré en crearle su extensión, es decir, su ayudante, escribiendo un método como ghStopWhen o algún nombre similar (se aceptan sugerencias de otros posibles identificadores).
En el framework Spring4D, la interfaz genérica IEnumerable< T > que es implementada por todas las colecciones, tal y como se puede ver en la Wiki o en el código, expone dos metodos llamados TakeWhile, declarados asi:

Código Delphi [-]
    ///  < summary >
    ///    Returns elements from a sequence as long as a specified condition is
    ///    true.
    ///  < /summary >
    function TakeWhile(const predicate: TPredicate< T >): IEnumerable< T >; overload;

    ///  < summary >
    ///    Returns elements from a sequence as long as a specified condition is
    ///    true. The element's index is used in the logic of the predicate
    ///    function.
    ///  < /summary >
    function TakeWhile(const predicate: TFunc< T, Integer, Boolean >): IEnumerable< T >; overload;

Quiza sea mas idiomático ya que TakeWhile, el While le podria recordar a cualquier desarrollador a la estructura de control y de ese modo dar una pista bastante certera de cual es su funcionalidad, sin necesidad de leer documentacion o implementacion

Luego hay otro curioso metodo que puede resultar util (ya que estamos), y es el SkipWhile, que basicamente es lo contrario del anterior

Código Delphi [-]
    ///  < summary >
    ///    Bypasses elements in a sequence as long as a specified condition is
    ///    true and then returns the remaining elements.
    ///  < /summary >
    function SkipWhile(const predicate: TPredicate< T >): IEnumerable< T >; overload;

    ///  < summary >
    ///    Bypasses elements in a sequence as long as a specified condition is
    ///    true and then returns the remaining elements. The element's index is
    ///    used in the logic of the predicate function.
    ///  < /summary >
    function SkipWhile(const predicate: TFunc< T, Integer, Boolean >): IEnumerable< T >; overload;

Un saludo

EDITO:

Por cierto Casimiro, no será posible hacer algo con la sintaxis para los genéricos? Cuando se usan las etiquetas de código:

Cita:
TList<Integer>
Se convierte en:

Código Delphi [-]
  TList

Última edición por AgustinOrtu fecha: 31-03-2016 a las 20:34:48.
Responder Con Cita
  #2  
Antiguo 31-03-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Agustín, de pura curiosidad, ¿La función llamada ElementAt implementada en dicha interfaz es con el fin de filtrar la colección o sería más bien con el propio TakeWhile?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 31-03-2016 a las 21:24:42.
Responder Con Cita
  #3  
Antiguo 31-03-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ahhh caramba, ya me respondí, lo que busco estaría implementado en la función Where, que interesante framework, tendré que estudiarlo está muy interesante. Aunque cosas como esta del Where ya deberían venir por defecto en Delphi, pienso.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 31-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola jhonny

El metodo ElementAt es para acceder al elemento mediante un indice

Cita:
/// <summary>
/// Returns the element at a specified index in a sequence.
/// </summary>
/// <param name="index">
/// The zero-based index of the element to retrieve.
/// </param>
/// <returns>
/// The element at the specified position in the source sequence.
/// </returns>
function ElementAt(index: Integer): T;
Podria decirse que es el equivalente a la propiedad indizada Items de las coleciones de la RTL

Código Delphi [-]
uses
  Generics.Collections;

var
  list: TList< Integer >;
begin
  list := TList< Integer >.Create;
  try
    list.AddRange([1, 2, 3]);
    ShowMessage(list.Items[1].ToString); // imrpime 2
  finally
   list.Free;
  end; 
end;

Usando Spring:

Código Delphi [-]
uses
  Spring.Collections;

var
  list: IList< Integer >;
begin
  list := TCollections.CreateList< Integer >;
  list.AddRange([1, 2, 3]);
  ShowMessage(list.Items[1].ToString); // imrpime 2
  ShowMessage(list.ElementAt(1).ToString); // imrpime 2
Responder Con Cita
  #5  
Antiguo 31-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Te recomiendo que veas este seminario online, que es bastante basico pero como introduccion a las colecciones de Spring es mas que suficiente: Enumerators, IEnumerable™ and the Spring Framework

Al comienzo habla sobre los Enumeradores nativos de Delphi, pero a partir de 14:35 se habla de Spring4d

Saludos
Responder Con Cita
  #6  
Antiguo 31-03-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por AgustinOrtu Ver Mensaje
Te recomiendo que veas este seminario online, que es bastante basico pero como introduccion a las colecciones de Spring es mas que suficiente: Enumerators, IEnumerable™ and the Spring Framework

Al comienzo habla sobre los Enumeradores nativos de Delphi, pero a partir de 14:35 se habla de Spring4d

Saludos
¡Genial!, gracias por tu recomendación Agustín.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 31-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Una de las cosas mas interesantes es que los enumeradores de Spring tienen ejecucion retardada

Basicamente todos los metodos que retornen IEnumerables (sean subconjuntos de la coleccion inicial, como en el caso del citado Where, o conjutos agregados como por ejemplo el caso del metodo Concat), hasta que no los iteremos por ejemplo en un bucle for-in, nada realmente pasa

Esto es muy poderoso para casos en los que encadenamos operaciones por ejemplo: .Where.Concat.Where.ForEach


Fuente con una explicacion mas detallada y precisa de Stefan Glienke
Responder Con Cita
  #8  
Antiguo 01-04-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por AgustinOrtu Ver Mensaje
Una de las cosas mas interesantes es que los enumeradores de Spring tienen ejecucion retardada

Basicamente todos los metodos que retornen IEnumerables (sean subconjuntos de la coleccion inicial, como en el caso del citado Where, o conjutos agregados como por ejemplo el caso del metodo Concat), hasta que no los iteremos por ejemplo en un bucle for-in, nada realmente pasa

Esto es muy poderoso para casos en los que encadenamos operaciones por ejemplo: .Where.Concat.Where.ForEach


Fuente con una explicacion mas detallada y precisa de Stefan Glienke
Pues de verdad que es muy... pero muy interesante dicho tema de ejecución retardada. Segun veo Delphi debería tener dicho framework (Spring4D) o sus caracateristicas ya incluidas.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un TPanel dentro de un TPanel dentro de un TScrollBox TiammatMX OOP 6 10-02-2014 15:12:08
Recorrer una tabla dentro de un Procedure en MSSQL Softweb SQL 5 21-07-2010 21:08:44
Duda sobre destrucción de objetos compuestos por otros objetos noob OOP 11 16-02-2009 00:28:33
Crear objetos dentro de otro objeto. Nieto OOP 5 28-11-2007 23:09:12
Recorrer todos los objetos creados de una clase propia mierda OOP 1 25-10-2007 19:52:10


La franja horaria es GMT +2. Ahora son las 18:35:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi