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');
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;