Ver Mensaje Individual
  #11  
Antiguo 17-09-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
A mi no me gusta el with en ninguna de sus formas, sabores y/o colores. En ningun lenguaje. Asi que de proponer algo, solamente se me ocurre matarlo; y si no lo matan, no usarlo. Asi de facil

Por mas que se implemente algo como lo de python, sigue teniendo el problema de que agrega un bloque mas al codigo, con un nivel de sangria adicional, el cual no hace para nada mas legible el codigo. Si el problema es que no gusta escribir "nombres largos de variables" se puede utilizar una fea tecnica que es crear una temporal con el nombre "corto"

Código Delphi [-]
procedure TFoo.Something;
var
  ds: TDataSet;
begin
  ds := Self.MyDataSet;

  ds.Close;
  ds.Open;
  ds.FieldByName('foo');
 // etc
end;

Aun asi, yo sigo pensando que las variables abreviadas siguen siendo malas (de ahi lo de feo) porque "ds" no me dice mucho. Es como cuando aprendemos a programar que no se porque motivo a las variables siempre las llamabamos: x, y, z, temp, aux, flag, etc..

Otra forma de atacar el problema es usar metodos encadenados, o interfaces fluidas; basicamente todos los metodos que soporta la interfaz devuelven el objeto al que se le envio el mensaje; osea, todo devuelve Self y le puedo seguir encadenando llamadas a metodos.

De esta forma se puede usar una coleccion asi:

Código Delphi [-]
procedure Test;
var
  Collection: Spring.Collections.IEnumerable;
begin
  Collection
    .Where(function(const Each: TMyClass): Boolean
       begin
         Result := Each.Enabled;
       end)
   .Sort(function(const Left, Right: TMyClass): Integer
       begin
         Result := Left.Index - Right.Index;
       end)
  .ForEach(procedure(const Each: TMyClass)
       begin
         WriteLn(Each.Name);
       end);
end;
Responder Con Cita