O que é Refatoração de Código em Delphi?

Refatoração de Código em Delphi
Pessoa com óculos de realidade virtual visualizando códigos.

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

  1. Variáveis Públicas: Name e Age são campos públicos, o que pode levar a um acesso inadequado.
  2. 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

  1. GetName e GetAge:
    • São métodos getters que retornam os valores das propriedades privadas FName e FAge.
  2. SetName e SetAge:
    • São métodos setters que atribuem valores às propriedades privadas FName e FAge.
  3. FormatInfo:
    • Este método formata as informações da pessoa (nome e idade) em uma string.
  4. DisplayInfo:
    • Este método exibe a informação formatada em uma mensagem.

Explicação do Código Refatorado

  1. Encapsulamento de Campos: Name e Age foram encapsulados usando propriedades (Name e Age), com métodos Get e Set para controle de acesso.
  2. Extração de Métodos: A funcionalidade de exibição de informações foi dividida em dois métodos: DisplayInfo e FormatInfo.
  3. Melhor Legibilidade e Manutenibilidade: O código agora é mais modular e fácil de entender.

Vantagens da Refatoração Realizada

  1. Encapsulamento: O uso de propriedades permite um melhor controle sobre como os dados são acessados e modificados.
  2. Modularidade: A divisão do método de exibição em métodos menores torna o código mais modular.
  3. 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:

  1. Adicionar a Unit ao Projeto:
    • Certifique-se de que a unit untClassperson esteja adicionada ao projeto.
  2. Criar um Formulário:
    • Crie um formulário com um TButton (Button1).
  3. Manipular o Formulário:
    • No evento OnClick do botão, crie um objeto da classe TPerson, configure suas propriedades e chame o método DisplayInfo.

Aqui está um exemplo de como fazer isso:

Exemplo de Uso

  1. Adicionar a Unit ao Formulário:
    • Abra o formulário e adicione a unit untClassPerson à seção uses.
  2. 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.
  1. Configuração do Projeto:
    • Certifique-se de que as units untMain e untClassPerson estejam corretamente referenciadas no projeto.

Explicação do Exemplo

  1. Importação da Unit:
    • A unit untClassPerson é importada para que a classe TPerson possa ser utilizada no formulário.
  2. Criação do Objeto:
    • Um objeto Person do tipo TPerson é criado quando o botão é clicado.
  3. Configuração das Propriedades:
    • As propriedades Name e Age do objeto Person são configuradas.
  4. Exibição das Informações:
    • O método DisplayInfo é chamado para exibir as informações da pessoa em uma mensagem.
  5. Liberação do Objeto:
    • O objeto Person é liberado com Free para evitar vazamento de memória.
Refatoração de código em Delphi
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.

Posts Relacionados


Deixe um comentário