Olá pessoal…
Hoje trago para vocês a diferença entre as funções Type e ValType via 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.