Tipagem de variáveis no AdvPL x TLPP

Boa tarde!

Estou com uma dúvida quanto a tipagem de variáveis no AdvPL e no TLPP.

Digamos que eu declare uma variável tipada como array. Percebi que essa variável iniciará como nulo até eu atribuir um valor para ela. Existe alguma de eu tipar a variável e ela já iniciar com um valor padrão sem precisar de uma atribuição posterior? Por exemplo: array igual a {}, numeric igual a 0, character igual a '', etc.

O motivo da dúvida é: digamos que eu possua três variáveis Array e que irei utilizar um aAdd para preencher esses arrays, sempre terei que atribuir ela um array vazio pra depois utilizar o aAdd, se não será gerado um erro de execução (expected A -> U).

Giordano,

Quando uma variável é declarada com tipagem, infelizmente não existe meio de já atribuir um valor inicial, isso independente da extensão do fonte.

Entendi. Que pena que não existe, pois seria algo bem útil.

Concordo, seria ótimo, já solicitamos isso algumas vezes no passado, espero que seja implementado! =)

Isso é uma falha grande do TLPP, inclusive é um dos motivos que cria uma certa resistência a migração pra essa linguagem, gasta-se o dobro de linhas/tempo para se “declarar” uma variável.

Sim, Marcos. O código acaba ficando feio pois você acaba gastando 6 linhas pra fazer algo que daria pra ser criado por 3 linhares apenas.

Acho que assim funciona:


Local aArray := {} As Array

Dessa maneira realmente funciona e o conteúdo da variável ficará como Array vazio na memória. Se apenas declarar ficará com o conteúdo nulo. Valeu pela Dica!

O método acima apesar de funcionar tem um efeito colateral indesejado.
Se por ventura houver um erro de digitação, do tipo:

Local aArray := “” as array

Isso não será avaliado no momento da compilação (Mesmo com includes atualizados - TDS e VsCode - TLPP e PRW). O erro só será capturado em tempo de execução.

O Contrário não funciona:
Local aArray as array := {} (Erro de Sintaxe é apresentado)

Aí fica a dúvida:

  • Isso significa que é desaconselhável declarar e atribuir na mesma sentença
    ou
  • É uma falha do compilador

Você tem razão, o compilador realmente não valida.
Agora será que a falha é ele aceitar a atribuição dessa forma? Também fiquei na dúvida.