[Delphi Rio] Uma grande novidade: declaração de variáveis inline

[Delphi Rio] Declaração de variáveis inline

Olá, pessoal!
Antes de iniciar a nova série de artigos, pretendo divulgar, aos poucos, algumas novidades do Delphi Rio, que será lançado em breve. Diga-se de passagem: são mudanças interessantes! Para iniciar, apresento-lhes um novo recurso na linguagem Delphi, que nos permite declarar uma variável em qualquer local do código.

 

A partir da versão 10.3 (Rio), será possível declarar uma variável após o bloco begin-end, ou seja, a declaração de variáveis na seção var não será mais obrigatória. Essa característica é chamada de inline, que, ao pé da letra, traduz-se como “na linha”.

Sendo assim, leitores, o código abaixo passa a ser válido:

procedure Exemplo1;
begin
  var Nome: string;
  Nome := 'André Celestino';
  ShowMessage(Nome);
end;

 

Além disso, este novo recurso de declaração também possibilita a inicialização de variáveis:

procedure Exemplo2;
begin
  var Idade: integer := 18;
  { ... }
end;

 

Variáveis declaradas dentro de um bloco de código só estarão disponíveis naquele escopo. Logo, uma variável declarada dentro de um bloco begin-end é limitada apenas à esse bloco, como no exemplo abaixo:

procedure Exemplo3;
begin
  if QtdeVendas > 0 then
  begin
    var TotalVenda: double;
    TotalVenda := ObterTotalVenda;
  end;
 
  // essa linha irá gerar um "Compile Error: Undeclared identifier: TotalVenda"
  ShowMessage(TotalVenda.ToString);
end

 

E o gerenciamento de memória?
Pois bem, variáveis de tipos de dados “gerenciados” pelo compilador (como strings, Interfaces e records) serão liberadas automaticamente ao término do escopo no qual elas foram declaradas. No exemplo a seguir, a variável do tipo de Interface é descartada após o begin-end:

procedure Exemplo4;
begin
  if UsarAPI then
  begin
    var API: IInterface = GetAPIInterface;
    API.AtualizarStatus;
  end; // neste "end", o método "Release" da Interface será chamado
end;

 

Outra novidade também deste recurso é a inferência de tipos. Ao omitir o tipo de dado de uma variável, o compilador irá inferir o tipo com base no valor que a variável recebeu:

procedure Exemplo5;
begin
  var Linha := 10; // compilador infere que é um tipo inteiro
  Inc(Linha); // resultado será 11
end;

No código acima, vale um adendo: o compilador irá usar o “maior tipo” mais próximo como dedução. Neste caso, a variável “Linha” será do tipo integer. Caso o desenvolvedor queira um tipo mais restrito, como shortint ou smallint, deverá declará-lo explicitamente.

 

Talvez, uma das maiores vantagens deste recurso de inline é a possibilidade de dispensar a declaração de variáveis que servem como contadores em estruturas for. Dessa forma, a variável poderá ser declarada na própria linha do for, lembrando, claro, que essa variável não estará disponível após o laço. Veja o exemplo:

procedure Exemplo6;
begin
  // indicando o tipo...
  for var Contador: integer := 0 to 10 do { ... }
 
  // ... ou simplesmente permitindo que o compilador faça a inferência
  for var Contador := 0 to 10 do { ... }
end;

 

Todos estes recursos dividiram a comunidade Delphi. Muitos gostaram, enquanto outros, não. Eu, particularmente, acredito que só temos a ganhar com a adição dessas novas features, desde que sejam utilizadas visando a qualidade do código.

Ao meu ver, essa nova feature da linguagem traz as seguintes vantagens:

  • Reduz a quantidade de variáveis na seção var, principalmente no caso de contadores em estruturas for;
  • Melhora a expressividade do código, uma vez que determinadas variáveis só serão declaradas e utilizadas dentro de um escopo específico;
  • Reduz linhas de código em função da inicialização de variáveis e inferência de tipos.

 

Porém, deixo também a minha recomendação: use este recurso com moderação! Em métodos complexos, várias variáveis espalhadas no código podem mais atrapalhar do que ajudar. Além disso, pense sempre em Clean Code. Escreva métodos pequenos para que a quantidade de variáveis não seja excessiva.

Para mais detalhes sobre inline variables, visite o blog do Marco Cantu:
http://blog.marcocantu.com/blog/2018-october-inline-variables-delphi.html

 

Volto logo, pessoal! 🙂


 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *