Histórico da Página
Composition Setup | ||
---|---|---|
import.css=/download/attachments/327912/newLayout.css | ||
Portuguese | ||
Versão a definir |
Índice | ||
---|---|---|
|
1. Introdução
Estão chegando muitas novidades em relação à tipagem de dados na linguagem TL++, o que a direciona para um nível de competitividade muito próximo de importantes linguagens de mercado, tais como Java e Type Script.
O que eu ganho?
Agora, o desenvolvedor TL++ vai poder ter um código de muito mais qualidade, pois muitos erros de type mismatch que eram somente identificados em tempo de execução (com o sistema em produção), poderão ser antecipados para o tempo de desenvolvimento e compilação.
Perco o Legado?
Não, você não perderá o legado, pois o seu fonte de extensão "prw" poderá ser migrado para extensão "tlpp" (extensão do TL++) de forma muito automática e sem refatoração.
Como os novos recursos de TL++ são realmente significativos, incluindo, claro, a consistente tipagem de dados, você poderá ir adaptando os seus fontes com o tempo, para poder aproveitar todo esse novo potencial.
2. Requisitos
Para a utilização dos recursos de Tipagem de Dados em TLPP são necessários os seguintes requisitos:- TOTVS Appserver - em definição;
- Pré-processador - em definição;
3. Tipos de Dados Primitivos
Os tipos de dados disponíveis são: numeric, character, date, codeblock, logical, array e object.Uma letra é utilizada para indicar cada tipo de dado, essa letra será mostrada nas mensagens de erro.
Tipo
Descrição
Indicador
numeric
Utilizado para valores numéricos inteiros ou decimais, positivos ou negativos.
N
char / character
Utilizado para valores do tipo caracter
C
date
Utilizado para armazenar datas
D
block / codeblock
Armazena um bloco de código para macro execução
B
logical
Armazena valores lógicos, verdadeiro (.T.) ou falso (.F.)
L
array
Utilizado para armazenar uma matriz de valores
A
object
Armazena objetos de interface ou classes
O
variadic
Utilizado para passagem de parâmetros de quantidades variáveis em funções
H
4. Funções
A criação de funções com o uso de tipagem de dados deve seguir a seguinte sintaxe:
Function <Nome da Funcao>([<parametro1> as <Tipo1>, <paramentroN as <TipoN>]) [as <Tipo>]
...
Return
Cada parâmetro deve ser especificado com o tipo de dado desejado.O retorno da função também pode ter um tipo de dado indicado.
5. Classe
A uso de tipo de dados em classes deve usar a seguinte sintaxe:
Class <Nome da Classe>
// Declaração de propriedades
Data <nPropriedad1>[as <tipo>] Data <nPropriedad2>[as <tipo>]
// Declaração de métodos
Method New() // Construtor, retorna Self
Method <Nome do Método>([<Param1>, <Param2>,...,<ParamN>])[as <tipo>]EndClass
// Construtor da Classe
Method New() Class <Nome da Classe>
Return Self
// Definição de métodos
Method <Nome do Método>(nParam1) Class <Nome da Classe> [as <tipo>]
Local n1 as numeric
Parameter<Param1>[as <tipo>]ConOut("Classe:MethodA")
Return n1
Em classes, podemos utilizar a tipagem de dados em propriedades e métodos.Na construção de métodos os parâmetros e seus respectivos tipos devem ser especificados após a declaração das variáveis locais.
6. Compilação
No processo de compilação de código fonte, que utilize os recursos de tipagem de dados, serão avaliados conforme as definições, as variáveis, parâmetros e retorno de dados.Caso alguma inconsistência na definição dos tipos seja encontrada será emitida uma mensagem de warning mostrando em qual linha está à divergência na declaração dos dados.
Por exemplo, na compilação do código fonte abaixo:
#include "protheus.ch"
Function xTipagem()
Local c1 as character
Local n1 as numeric
n1:="ABCDE"c1:=10ReturnTemos o seguinte resultado na compilação:
TIPAGEM.PRW(7) warning W0015 Incompatible Types : cannot convert from 'C' to 'N'
TIPAGEM.PRW(8) warning W0015 Incompatible Types : cannot convert from 'N' to 'C'
7. Execução
Durante a execução de uma função e/ou classe que utilize o recurso de tipagem de dados existe uma verificação do tipo da variável que é utilizada na passagem de parâmetro com o que foi definido no protótipo da função.Caso os tipos de dados sejam diferentes será exibido uma mensagem no console do TOTVS AppServer e o valor NIL será atribuído a variável que foi passada como parâmetro, causando um comportamento diferente do esperado ou erro de tipo de dado.
Para exemplificar este comportamento temos o seguinte exemplo:
User Function xTMain()
Local c1 as character
Local l1 as logical
c1:="ABCDE"l1:=.T.ConOut("Chamada 1 - xTLog")
ConOut(U_xTLog(l1))
ConOut("Chamada 2 - xTLog")
ConOut(U_xTLog(c1))//Invalid parameterReturn
User Function xTLog(l1 as logical)
If l1=.T.ConOut("Logical .T.")
Else
ConOut("Logical .F.")
EndIf
Return l1
Neste exemplo temos duas funções sendo que a primeira (xTMain) faz duas chamadas da função xTLog, sendo que a primeira chamada utiliza um parâmetro lógico, como esperado no protótipo da função e a segunda utiliza um parâmetro do tipo character, incorreto para a função.Após a execução temos os seguintes resultados:
Chamada 1 – xTLog
Logical .T.
.T.
Chamada 2 - xTLog
*** Warning - Mismatched parameters type calling U_XTLOG at parameter 1 - expected L -> C
Logical .F.
NIL
Na chamada 1 a execução ocorre conforme o esperado pois o parâmetro utilizado é do mesmo tipo indicado no protótipo da função.Na chamada 2 é passado um parâmetro do tipo character, diferente do logical indicado no protótipo da função, sendo assim quando a função xTLog é executada o valor da variável l1 é NIL, diferente de true (.T.) atribuído a ela antes da chamada da função, sendo assim o resultado é diferente da primeira chamada.
Estão chegando muitas novidades em relação à tipagem de dados na linguagem TL++, o que a direciona para um nível de competitividade muito próximo de importantes linguagens de mercado, tais como Java e Type Script.
O que eu ganho?
Agora, o desenvolvedor TL++ vai poder ter um código de muito mais qualidade, pois muitos erros de type mismatch que eram somente identificados em tempo de execução (com o sistema em produção), poderão ser antecipados para o tempo de desenvolvimento e compilação.
Perco o Legado?
Não, você não perderá o legado, pois o seu fonte de extensão "prw" poderá ser migrado para extensão "tlpp" (extensão do TL++) de forma muito automática e sem refatoração.
Como os novos recursos de TL++ são realmente significativos, incluindo, claro, a consistente tipagem de dados, você poderá ir adaptando os seus fontes com o tempo, para poder aproveitar todo esse novo potencial.
Section |
---|
Abrangência |