Lo que tiene sentido es la siguiente:
Si usted tiene una clase (como por ejemplo un TForm) no es una función local, ya sea persistentemente crear los campos que evite el costo de las operaciones de búsqueda repetida (FieldByName).
Si no utiliza los campos persistentes (en dfm), puede hacer una búsqueda una vez en tiempo de ejecución, y evitar el costo de buscarla repetidamente, si se usa ya sea (a) más de una vez el contexto de una función única, o (b) donde podría buscarse una vez cuando se ejecuta la consulta, y almacenarse en un campo protegido de un objeto, de modo que pueda reutilizarse durante la vida de la consulta o el objeto, según sea apropiado.
Su ejemplo artificioso tiene un beneficio cero, pero yo creo que las repetidas operaciones de búsqueda de campos cuando se desperdician estas búsquedas lógicas repetidas, son tal vez una cosa digna de mencionar como "desperdicio".
veo código así todo el día, y me vuelve loco:
procedure TSomething.DoSomething;
begin
fDataset.FieldByName('X').AsString = fDataset.FieldByName('X').AsString+'Y';
end;
El código anterior se hace menos legible por tales repeticiones, y tales preocupaciones de legibilidad, así como las preocupaciones de comprobación de errores son por qué evitaría lo anterior, y en lugar de tener un campo fX:TField
:
TSomething = class(TBaseClass)
protected
fDataSet:TDataSet;
fX:TField;
end;
Ahora podemos escribir
fX.AsString := fX.AsString + 'Y';
Creo que las personas se preocupan demasiado por el rendimiento y no por la calidad, y las subexpresiones largas repetidas son un signo de "falta de calidad" y "falta de pensamiento" tanto como de "falta de preocupación por el rendimiento".
Esos dos trozos de código llevará a cabo de forma idéntica. –
¿Puedes vincular esa publicación? Quizás malinterpretaste algo. – CodesInChaos
Supongo que puede ser más rápido si necesita acceder al mismo valor más de una vez (así que en lugar de llamar 'FieldByName' varias veces usa una variable) – a1ex07