![]() |
Pessoa com óculos de realidade virtual visualizando códigos. |
Í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
![]() |
Ilustração do projeto. |
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.
Nenhum comentário:
Postar um comentário