Organização de códigos

É muito comum ver programadores que prezam pela organização de código e até mesmo pela otimização dos mesmos, porém raramente vemos resultados significativos no executável. De fato em alguns testes rápidos cheguei à conclusão que o tamanho do executável nem ao menos muda, embora nem sempre isso acontece pois o otimizador de códigos do Delphi é extremamente poderoso neste quesito.

Quando compilamos um projeto, o Delphi analisa todos os métodos e verifica repetição de código. Caso exista, ele mesmo se encarrega de organizar para que o tamanho do executável não fique enorme, isto garante um ótimo resultado final com relação ao desempenho e tamanho do programa.

Como exemplo simplificado, considere que o código abaixo está em uma unit com cinco botões, onde cada um chama uma rotina praticamente iguais.

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowMessage('Botão um');
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  ShowMessage('Botão dois');
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  ShowMessage('Botão três');
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  ShowMessage('Botão quatro');
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  ShowMessage('Botão cinco');
end;

Repare que todos os botões utilizam ShowMessage para mostrar alguma mensagem, você poderia considerar que cada um deles fosse um código de fechar uma Query, mudar uma SQL e reabrir novamente, também seria considerado repetição, ou seja, sempre que você der um CTRL+C e CTRL+V em uma parte do código que faz a mesma coisa no sistema todo, vale a pena considerar a idéia de uma função que faça isso por todas.

Por que? Oras, suponha que você tenha 5 locais diferentes do seu sistema que utiliza a mesma consulta a uma Query, se elas foram copiadas e coladas antes de terem sido testadas, com um erro de sintaxe, por exemplo, você inevitavelmente terá de localizar e corrigir todos os cinco locais para que o sistema funcione corretamente. Caso escreva uma única função como no código abaixo, ao corrigir uma unit, todos os locais do sistema que utilizam esta função, ou procedure, passarão a estar corretos também.

procedure ShowBotao(const I: Integer);
begin
  case I of
    1: ShowMessage('Botão um');
    2: ShowMessage('Botão dois');
    3: ShowMessage('Botão três');
    4: ShowMessage('Botão quatro');
    5: ShowMessage('Botão cinco');
  end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ShowBotao(1);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  ShowBotao(2);
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  ShowBotao(3);
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  ShowBotao(4);
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  ShowBotao(5);
end;

No final das contas, após a compilação deste projeto, com os dois códigos tivemos um tamanho de 462.848 bytes, ou 452 Kb, como mostra a imagem.

build1 x build2

Conclusão
Como vimos antes, o tamanho do executável acabou por ficar o mesmo devido ao código contido nele, porém em grandes aplicações o resultado mais observado é a facilidade de manutenção. É possível que a aplicação fique mais leve? Sem dúvidas, porém o Delphi não faz milagres, uma boa programação e organização de códigos é que torna sua aplicação mais robusta para o cliente e mais fácil de manter para sua equipe de programação.
O interessante é aplicar regras de desenvolvimento como CleanCode para que o código fique mais legível sem perder seu desempenho, claro.