Base de Conhecimento

Declarações Delphi e Inline var

Desde Delphi 10.3, você tem a possibilidade em Delphi de declarar variáveis em linha diretamente em seu código. Não estávamos acostumados a isso em Delphi, então você pode achar isso um pouco confuso. Mas tem algumas vantagens.

Declarações de escopo

Em primeiro lugar, faz com que as variáveis sejam escopadas. Portanto, elas só funcionam no escopo onde são declaradas. Elas também só estão disponíveis, é claro, após o momento em que são declaradas. Isto reduz bastante a chance de erros. É menos provável que você reutilize uma variável com a chance de inicialização incorreta. A refatoração também facilita a cópia do código para outra função.

Ao mover o código em uma função, você também pode ver imediatamente que outras inicializações você precisa levar consigo.
No exemplo de código abaixo, você pode ver como isto funciona. Suponha que você mova a parte se Cliente.IsNew a partir daqui, você verá automaticamente (através do Code Insight, mas também através da compilação) que a variável Cliente é desconhecida. Este não é o caso com a declaração clássica.

if IsCustomer then
begin
  var Customer := Order.Customer;
  if Customer.IsNew then
  begin
    var DisplayName := Customer.CompanyName + Customer.Name;
    ...
    SendEmail(Customer, DisplayName);
  end;
end;

Reconhecimento de tipo

Outra vantagem é o reconhecimento automático do tipo. Portanto, você não precisa mais indicar de que tipo uma variável é. Isto também reduz a necessidade de incluir uma unidade no arquivo no qual você está trabalhando. O Code Insight também reconhece o tipo, assim você pode simplesmente continuar trabalhando com ele.

Suponha que você tenha as seguintes unidades:

unit DataModel.Customer; 

interface 

type 
  ICustomer = interface 
    ['GUID'] 
    
    function CompanyName: string; 
    function Name: string; 
  end;
unit DataModel.CustomerOrder;   

interface  

uses DataModel.Customer;  
 
type  
  ICustomerOrder = interface  
    ['GUID'] 
     
    function Customer: ICustomer;  
end;

No primeiro exemplo, utilizamos isto da mesma forma:

var Customer := Order.Customer; // Returns a ICustomer

Quando uma função retorna um tipo específico (como uma interface neste exemplo), não é necessário definir esta variável ou incluir a unidade.

Se você usar interfaces, há uma exceção a esta regra. E isto é quando você cria um objeto e quer usá-lo como uma variável de interface. Então você tem que declarar o tipo também, caso contrário a variável é automaticamente digitada como a variante `T…`.

var Customer: ICustomer := TCustomer.Create;

Mais fácil em loops

As variáveis que você declara para um loop também podem ser declaradas diretamente em linha. Isto geralmente é melhor, porque você sempre declara a variável especificamente para um laço. Mais uma vez, isso evita que você use uma variável de loop após seu código de loop e potencialmente criando problemas com ela.

for var i := o to List.Count - 1 do
  ...

for var Customer in MailingList.Customers do
  ...

Uso em Delphi 10.3

Embora a declaração de variáveis em linha seja implementada em Delphi 10.3, o Code Insight não a reconhece. No entanto, o compilador o reconhece. Portanto, em Delphi 10.3, não se deixe enganar pela linha vermelha abaixo de seu código, ele também funciona lá.

Written by Kees de Kraker
Diretor

Contato

Deixe-nos ajudá-lo a realizar seus sonhos.