TYPE()
 Determina o tipo de uma expressao
------------------------------------------------------------------------------

 Sintaxe

     TYPE(<cExp>) --> cTipo

 Argumentos

     <cExp> é uma expressao ao cujo tipo será determinado.  <cExp> pode
     ser um campo, com ou sem o alias, uma variável pública ou privada, ou
     uma expressao de qualquer tipo.

 Retorno

     TYPE() retorna um dos seguintes caracteres:

     Tabela 5-36: Valores de Retorno de TYPE()
     ------------------------------------------------------------------------
     Retorno                 Significado
     ------------------------------------------------------------------------
     A                       Vetor
     B                       Bloco
     C                       Caractere
     D                       Data
     L                       Lógico
     M                       Memo
     N                       Numérico
     O                       Objeto
     U                       NIL, local, ou static
     UE                      Erro sintático
     UI                      Erro indeterminado
     ------------------------------------------------------------------------

 Descriçao

     TYPE() é uma funçao de tratamento do sistema que retorna o tipo de dado
     da expressao especificada.  Pode ser utilizada para testar a validade
     de uma expressao, caso esta expressao use funçoes da CLIPPER.LIB e nao
     referencie variáveis estáticas nem locais, funçoes definidas pelo
     usuário, ou funçoes da linguagem fornecidas na EXTEND.LIB.

     TYPE() é semelhante a VALTYPE(), com a diferença de que utiliza o
     operador macro (&) para determinar o tipo do argumento.  Isto
     impossibilita a utilizaçao de TYPE() para determinar o tipo de
     variáveis locais e estáticas.   VALTYPE(), por outro lado, avalia uma
     expressao e determina o tipo de dados do valor de retorno.  Isto
     permite determinar o tipo das funçoes definidas pelo usuário, bem como
     o de variáveis locais e estáticas.

 Notas

       Referências a vetor: Referências a vetores públicos e
        privados retornam "A".  Referências a elementos de vetor retornam o
        tipo do elemento.

       IF(): Com a finalidade de retornar o tipo de dados
        apropriado para uma expressao IF(), TYPE() avalia a condiçao e
        depois retorna o tipo do path avaliado.  Caso a condiçao IF() ou o
        path avaliado seja inválido, TYPE() retorna "UE".

       Testando parâmetros: TYPE() somente pode testar a
        validade dos parâmetros recebidos utilizando a declaraçao
        PARAMETERS.  Testar um parâmetro declarado como parte de uma
        declaraçao FUNCTION ou PROCEDURE sempre retorna "U".  Para
        determinar se um argumento foi saltado ou omitido do final da lista
        de argumentos, compare o parâmetro a NIL ou use VALTYPE() com
        demonstra o exemplo abaixo.

       Funçoes da EXTEND.LIB ou definidas pelo usuário: Se, em
        qualquer lugar em uma expressao, é feita uma referência a uma funçao
        nao encontrada na CLIPPER.LIB (uma funçao EXTEND.LIB ou definida
        pelo usuário), TYPE() retorna "UI".  Caso a funçao definida pelo
        usuário nao seja linkada no programa corrente, TYPE() retorna "U".

 Exemplos

       Os exemplos a seguir demonstram vários resultados de
        invocaçoes de TYPE():

        ? TYPE('SUBSTR("Oi mundo", 4, 5)')         // Resulta: C
        ? TYPE("UDF()")                            // Resulta: UI
        ? TYPE('IF(.T., "verdadeiro", 12)')        // Resulta: C

       Este exemplo demonstra dois métodos para testar a existência
        e tipo dos parâmetros declarados:

        FUNCTION TestParams( cParam1, nParam2 )
           IF cParam1 = NIL
              ? "Parametro nao foi passado"
              cParam1 := "Valor assumido"
           ENDIF
           //
           IF VALTYPE(nParam2) != "N"
              ? "Parametro nao foi passado ou tipo invalido"
           ENDIF
           .
           . <declaraçoes>
           .
           RETURN NIL

 Arquivos:  Biblioteca CLIPPER.LIB.
 To download this example - click here.

See Also: VALTYPE()