
Índice
Introdução
Nesse post iremos abordar sobre Refatoração de Código em Delphi. Para elevar o nível do seu aprendizado e para que você possa aplicar no seu projeto.
Refatoração de código é o processo de reorganizar e melhorar a estrutura interna do código sem alterar seu comportamento externo. O objetivo é tornar o código mais legível, fácil de entender, manter e expandir. Refatorar não é sobre adicionar novas funcionalidades, mas sim sobre aprimorar a qualidade do código existente.
Técnicas de Refatoração e Otimização de Código em Delphi
1. Renomeação de Variáveis e Métodos
- Renomeie variáveis e métodos para nomes mais descritivos.
- Isso ajuda a entender o propósito de uma variável ou método sem precisar olhar seu conteúdo.
2. Extração de Métodos
- Extraia partes do código que realizam uma tarefa específica em métodos separados.
- Isso torna o código mais modular e reutilizável.
3. Remoção de Código Morto
- Elimine variáveis, métodos ou classes que não são mais usados.
- Isso reduz a complexidade do código.
4. Substituição de Expressões Temporárias por Métodos
- Substitua expressões temporárias por métodos, melhorando a legibilidade e a reutilização.
5. Encapsulamento de Campos
- Encapsule campos usando propriedades, melhorando o controle sobre como os campos são acessados e modificados.
6. Divisão de Grandes Classes ou Métodos
- Divida grandes classes ou métodos em menores e mais específicos.
- Isso melhora a coesão e a manutenção do código.
7. Otimização de Loops
- Substitua loops ineficientes por alternativas mais eficientes.
- Isso pode melhorar o desempenho do código.
Quando Aplicar a Refatoração e Otimização de Código
1. Antes de Adicionar Novas Funcionalidades
- Refatore o código para garantir que ele esteja limpo e bem organizado antes de adicionar novas funcionalidades.
- Isso facilita a integração de novas funcionalidades.
2. Durante a Correção de Bugs
- Refatore o código ao corrigir bugs para garantir que o problema não reapareça e que o código seja mais robusto.
3. Após Revisões de Código
- Aplique refatoração após revisões de código para implementar as melhorias sugeridas pela equipe.
4. Quando o Código se Torna Difícil de Entender
- Se você ou sua equipe tiverem dificuldades para entender o código, é um bom momento para refatorar.
Exemplo Completo de Refatoração de Código em Delphi
Código Original
type TPerson = class Name: string; Age: Integer; procedure DisplayInfo; end; procedure TPerson.DisplayInfo; begin ShowMessage('Name: ' + Name); ShowMessage('Age: ' + IntToStr(Age)); end;
Problemas Identificados
- Variáveis Públicas:
Name
eAge
são campos públicos, o que pode levar a um acesso inadequado. - Método de Exibição Grande: O método
DisplayInfo
pode ser dividido em métodos menores.
Código Refatorado
unit untClassPerson; interface uses System.SysUtils, System.Classes, Vcl.Dialogs; type TPerson = class private FName: string; FAge: Integer; function GetName: string; function GetAge: Integer; procedure SetName(const Value: string); procedure SetAge(Value: Integer); function FormatInfo: string; public property Name: string read GetName write SetName; property Age: Integer read GetAge write SetAge; procedure DisplayInfo; end; implementation function TPerson.GetName: string; begin Result := FName; end; function TPerson.GetAge: Integer; begin Result := FAge; end; procedure TPerson.SetName(const Value: string); begin FName := Value; end; procedure TPerson.SetAge(Value: Integer); begin FAge := Value; end; procedure TPerson.DisplayInfo; begin ShowMessage(FormatInfo); end; function TPerson.FormatInfo: string; begin Result := 'Name: ' + FName + sLineBreak + 'Age: ' + IntToStr(FAge); end; end.
Explicação dos Métodos
- GetName e GetAge:
- São métodos getters que retornam os valores das propriedades privadas
FName
eFAge
.
- São métodos getters que retornam os valores das propriedades privadas
- SetName e SetAge:
- São métodos setters que atribuem valores às propriedades privadas
FName
eFAge
.
- São métodos setters que atribuem valores às propriedades privadas
- FormatInfo:
- Este método formata as informações da pessoa (nome e idade) em uma string.
- DisplayInfo:
- Este método exibe a informação formatada em uma mensagem.
Explicação do Código Refatorado
- Encapsulamento de Campos:
Name
eAge
foram encapsulados usando propriedades (Name
eAge
), com métodosGet
eSet
para controle de acesso. - Extração de Métodos: A funcionalidade de exibição de informações foi dividida em dois métodos:
DisplayInfo
eFormatInfo
. - Melhor Legibilidade e Manutenibilidade: O código agora é mais modular e fácil de entender.
Vantagens da Refatoração Realizada
- Encapsulamento: O uso de propriedades permite um melhor controle sobre como os dados são acessados e modificados.
- Modularidade: A divisão do método de exibição em métodos menores torna o código mais modular.
- Reutilização: O método
FormatInfo
pode ser reutilizado em outras partes do código onde a formatação da informação seja necessária.
Como Utilizar a Classe TPerson
Para utilizar a classe TPerson
, siga os passos abaixo:
- Adicionar a Unit ao Projeto:
- Certifique-se de que a unit
untClassperson
esteja adicionada ao projeto.
- Certifique-se de que a unit
- Criar um Formulário:
- Crie um formulário com um
TButton
(Button1).
- Crie um formulário com um
- Manipular o Formulário:
- No evento
OnClick
do botão, crie um objeto da classeTPerson
, configure suas propriedades e chame o métodoDisplayInfo
.
- No evento
Aqui está um exemplo de como fazer isso:
Exemplo de Uso
- Adicionar a Unit ao Formulário:
- Abra o formulário e adicione a unit untClassPerson à seção
uses
.
- Abra o formulário e adicione a unit untClassPerson à seção
- Código do Formulário:
unit untMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses untClassPerson; procedure TForm1.Button1Click(Sender: TObject); var person : TPerson; begin person := TPerson.Create; try try person.Name := 'John Doe'; person.Age := 30; person.DisplayInfo; except on E: Exception do ShowMessage('Erro:'+ E.Message); end; finally person.Free; end; end; end.
- Configuração do Projeto:
- Certifique-se de que as units untMain e
untClassPerson
estejam corretamente referenciadas no projeto.
- Certifique-se de que as units untMain e
Explicação do Exemplo
- Importação da Unit:
- A unit
untClassPerson
é importada para que a classeTPerson
possa ser utilizada no formulário.
- A unit
- Criação do Objeto:
- Um objeto
Person
do tipoTPerson
é criado quando o botão é clicado.
- Um objeto
- Configuração das Propriedades:
- As propriedades
Name
eAge
do objetoPerson
são configuradas.
- As propriedades
- Exibição das Informações:
- O método
DisplayInfo
é chamado para exibir as informações da pessoa em uma mensagem.
- O método
- Liberação do Objeto:
- O objeto
Person
é liberado comFree
para evitar vazamento de memória.
- O objeto

Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/Refatoracao
Conclusão
Refatoração de código é uma prática essencial no desenvolvimento de software, pois melhora a qualidade, a legibilidade e a manutenção do código. Em Delphi, seguir técnicas de refatoração e otimização ajuda a criar sistemas mais robustos e eficientes. Aplicar essas técnicas em momentos apropriados, como antes de adicionar novas funcionalidades ou durante a correção de bugs, garante que o código permaneça limpo e fácil de entender. Ao refatorar, lembre-se de sempre manter o comportamento externo do código inalterado, focando apenas na melhoria da sua estrutura interna.