Hola, para reducir código yo sigo más o menos estas reglas:
1. Emplear procedimientos y funciones cuando se los considere oportuno. Si tras un buen análisis se observan tareas repetitivas, lo mejor es tenerlas en un procedimiento y/o función según sea el caso.
2. Si se debe trabajar muchísimo con un objeto: With ... do. En pocas líneas mejor me lo evito.
3. Si por alguna razón existe alguna variación entre rutinas que comparten alguna similitudes y que se repiten, analizo objetivamente si se puede emplear algun parámetro de tipo bandera, o control que determine que acción realizar. Por ejemplo:
procedure Limpiar(ArrayClase: array of TControlClass; ExceptionList: TObjectList; ... Flag: TFlag);
La idea es que este "Limpiar" pueda ofrecer no sólo las funciones para limpiar uno o varios tipos de controles. Sino que maneje alguna lista de excepciones (por poner ejemplo, deseo limpiar todos los edits excepto xxx) y se puede preveer cualquier parámetros adicional que sea oportuno para el contexto.
4. Nombres de variables simples, y cortas aplicadas al contexto en que se la usan (si el contexto es de una acción, el nombre debe reflejarlo). Yo me he acostumbrado al inglés, se reduce muchos caracteres y armoniza con el lenguaje.
5. Identación clara. Nada de if then, a menos que sea una línea. Evitar en lo posible el anidamiento excesivo de Ifs. En caso de muchos If, analizar si es posible una "conversión" a case. Aplico tablas de verdad a fin de reducir la complejidad de las condiciones y el anidamiento. Por ejemplo:
if Condicion1
then if Condicion2
then
En caso de ser posible, evitarse ese if, es mejor algo como:
if (Condicion1) and (Condicion2)
then
6. Separar la lógica de la interfaz. Si bien hay situaciones en que no se puede, lo mejor es reducir el impacto entre ambas capas.
Y si me disculpas un momento, a ese código de limpiar se lo podría reducir si se emplease FindComponents y recorrer la lista en busca de componentes para hallar los componentes de una clase y cuyos nombre tienen un "denominador común".
en el caso de campo1, campo2, se puede hacer algo como:
for i := 1 to 5 do
Form1.ZEjemplo.FieldByName('campo' + IntToStr(i)).AsString := ...
Claro que por 5, no me molesto en hacer algo tan "enrreversado" Pero en un caso de muchos, vale la pena.
Bueno, eso se me ocurre por ahora,
Saludos,
¿Se ve la idea?