Qual é a diferença entre Type e ValType?

Olá pessoal…

Hoje trago para vocês a diferença entre as funções Type e ValType via AdvPL.

AdvPL

AdvPL

Ambas as funções servem para identificar a tipagem da variável (como Caracter, Logic, Numeric, etc), a diferença está em que, a Type, funciona exclusivamente com variáveis Private e Public, já a ValType funciona com qualquer tipo.

Porém, a ValType, você tem que ter certeza que a variável ou o atributo foi declarado, do contrário se você usar, por exemplo, para testar uma tag de um arquivo xml, e essa tag não existir, ele vai ocasionar um erro na execução e encerrar o programa. Para isso, usamos a Type, pois quando não existe o atributo do objeto, a tag, ou a variável, ele simplesmente nos retorna “U”.

Abaixo um exemplo que montei com todos os tipos de variáveis e o retorno na frente.

#Include "Protheus.ch"

Static cVarStatic := "Ti"

User Function zTestType()
	Local   cVarLocal  := "Ti"
	Private cVarPriv   := "Ti"
	Private oFontTst   := TFont():New("Tahoma")
	Public  __cVarPubl := "Ti"
	
	Alert(Type("cVarStatic"))       //Retorna "U" - Indefinido
	Alert(Type("cVarLocal"))        //Retorna "U" - Indefinido
	Alert(Type("cVarPriv"))         //Retorna "C" - Caracter
	Alert(Type("__cVarPubl"))       //Retorna "C" - Caracter
	Alert(Type("oFontTst:Bold"))    //Retorna "L" - Lógico
	Alert(Type("oFontTst:XXX"))     //Retorna "U" - Indefinido
	
	Alert(ValType(cVarStatic))      //Retorna "C" - Caracter
	Alert(ValType(cVarLocal))       //Retorna "C" - Caracter
	Alert(ValType(cVarPriv))        //Retorna "C" - Caracter
	Alert(ValType(__cVarPubl))      //Retorna "C" - Caracter
	Alert(ValType(oFontTst:Bold))   //Retorna "L" - Lógico
	Alert(ValType(oFontTst:XXX))    //Dá erro de Invalid Property e encerra o programa
Return

Obs.: Se você está tentando verificar a existência de uma tag xml, você também pode usar a função XMLChildEx.

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação