logotipo Blog Giovani Da Cruz
Delphi

Diferença entre os parâmetros out e var no Delphi/Lazarus

5 min de leitura 69 visualizações
Entendendo a Diferença Entre os Parâmetros out e var em Delphi e Lazarus
Código testado no Lazarus 3.6

Quando trabalhamos com Delphi ou Lazarus, é comum nos depararmos com parâmetros especiais em funções e procedimentos, como var e out. Embora ambos sejam usados para passar parâmetros por referência, cada um tem uma finalidade e um comportamento distinto. Neste post, vamos explorar essas diferenças e entender como e quando utilizá-los.

 

O que é o out?

O parâmetro out é usado para indicar que uma variável será usada exclusivamente para retornar valores de uma função ou procedimento. Quando uma variável é passada como out, ela não precisa estar inicializada antes da chamada, pois seu valor anterior será (ou deve ser) descartado. O compilador considera que a variável é “criada do zero” dentro do escopo do método.

Características do out:

  • Exclusivo para saída: Ele é projetado para retornar dados, não para receber valores de entrada.
  • Clareza de intenção: Indica explicitamente que o parâmetro será usado apenas como saída.

 

O que é o var?

O parâmetro var também é usado para passar variáveis por referência, mas ele permite tanto entrada quanto saída de valores. Quando uma variável é passada como var, seu valor atual é preservado e pode ser manipulado pela função ou procedimento.

Características do var:

  • Mantém o valor inicial: O valor existente na variável é levado para a função.
  • Entrada e saída: Pode ser usado tanto para fornecer valores quanto para retornar resultados.
  • Maior flexibilidade: Adequado para cenários em que o valor inicial é importante.

 

Diferenças Entre out e var

A tabela a seguir resume as principais diferenças:

Tipo de Parâmetro Comportamento
Value (Entrada Apenas) Passa uma cópia do valor. Alterações dentro do procedimento não afetam a variável original.
Out (Saída Apenas) Ignora o valor inicial e exige que o procedimento defina um novo valor antes do uso.
Var (Entrada e Saída) Preserva o valor inicial, permitindo leitura e escrita diretamente na variável original.

 

Quando Usar out ou var?

  • Use out quando:
    • Você precisa retornar um valor exclusivamente.
    • Não importa o valor inicial da variável.
  • Use var quando:
    • O valor inicial da variável é relevante.
    • A variável precisa servir como entrada e saída.

 

 

Considere o seguinte exemplo do site https://www.delphibasics.co.uk/:

var
  number1, number2, number3 : Integer;
begin
  // Put values in our numbers
  number1 := 3;
  number2 := 4;
  number3 := 5;

  // Call the simple routine to see how they are handled
  ThreeParms(number1, number2, number3);

  // Show their values now
  ShowMessageFmt('number1 = %d number2 = %d number3 = %d ',
                 [number1, number2, number3]);
end;

// Simple routine illustrating 3 types of parameter handling
// value1 : Input value only
// value2 : Output value only
// value3 : Input and output value
procedure TForm1.ThreeParms(    value1: Integer;
                            Out value2: Integer;
                            var value3: Integer);
begin
  // Add value1 to value 3 as the value2 output
  value2 := value1 + value3;

  // Multiply value1 by value3 to give value3 output
  value3 := value1 * value3;
end;

Esse exemplo ilustra perfeitamente as diferenças práticas entre os tipos de parâmetros value, out e var em Delphi, além de como cada um é manipulado em diferentes cenários. Vamos detalhar o comportamento:

 

Inicialização

number1 := 3; // Valor inicial para o parâmetro por valor
number2 := 4; // Valor inicial, mas será ignorado por "out"
number3 := 5; // Valor inicial que será alterado por "var"

Os valores iniciais foram definidos para ilustrar como cada tipo de parâmetro trata esses dados.

 

Chamada do Procedimento

ThreeParms(number1, number2, number3);

Manipulação dos Parâmetros

  • value1 (apenas entrada):
    • Esse parâmetro é passado por valor. O procedimento tem acesso a uma cópia do valor de number1, mas qualquer alteração dentro do procedimento não afetará a variável original.
    • No caso, value1 mantém o valor 3 durante a execução.
  • value2 (apenas saída):
    • Esse parâmetro é passado como out. O valor inicial de number2 é ignorado, e ele só terá um valor após ser definido explicitamente dentro do procedimento.
    • No código: value2 := value1 + value3;
    • Resultado: value2 será 3 + 5 = 8.
  • value3 (entrada e saída):
    • Esse parâmetro é passado por var. Ele preserva o valor original ao entrar no procedimento e pode ser alterado, com a alteração refletida na variável original.
    • No código: value3 := value1 * value3;
    • Resultado: value3 será 3 * 5 = 15.

 

 

Saída do Código

Ao exibir os valores após a chamada de ThreeParms, o resultado será:

number1 = 3 number2 = 8 number3 = 15

 

 

Resumo dos Comportamentos

  • value (entrada apenas): Cópia do valor é usada no procedimento, sem alterar o original.
  • out (saída apenas): Ignora o valor inicial e deve ser definido dentro do procedimento antes de uso.
  • var (entrada e saída): Permite leitura e escrita no valor original.

 

Conclusão

Tanto out quanto var são ferramentas poderosas para manipular variáveis por referência em Delphi e Lazarus. Compreender suas diferenças e aplicações ajuda a escrever códigos mais claros, eficientes e alinhados com a intenção do programa. Agora que você conhece esses conceitos, experimente aplicá-los em seus projetos e veja a diferença na qualidade do seu código!

 

 

 

E você, o que achou?

Essa explicação sobre os tipos de parâmetros em Delphi ajudou a esclarecer suas dúvidas?

Deixe sua opinião nos comentários!

Sua participação é muito importante para enriquecer a discussão e ajudar outros leitores.

Se tiver dúvidas, sugestões ou quiser compartilhar sua experiência, vamos conversar! 😊

 

 

💻 Compartilhe o post com outras pessoas se você achou ele relevante! 😊

 

 

 

📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩‍💻 🔍✨

Até o próximo post. Valeu! 👋📖

 

 

 

#Delphi #Programação #DesenvolvimentoDeSoftware

#Lazarus #VarVsOut #DicasDeProgramação

#Desenvolvedores #CodandoMelhor #Tecnologia

#GiovaniDaCruz

 

 

 

Deixe um comentário

Seu e-mail não será publicado.