Precedencia de Operadores

     Quando avaliando expressoes com duas ou mais operaçoes que nao estejam
     explicitamente agrupadas com parênteses, Clipper utiliza um conjunto de
     regras para determinar a ordem na qual as várias operaçoes serao
     executadas.  Estas regras, chamadas de regras de precedência, sao a
     hierarquia dos operadores Clipper.

     -----------------------------------------------------------------------
     . Nota

     Todas as chamadas de funçao e operadores de expressao sao avaliados
     antes de quaisquer outros operadores.
     -----------------------------------------------------------------------

     Precedência de Categorias

     Quando mais de um tipo de operador aparece numa expressao, todas as
     subexpressoes sao avaliadas em cada nível de precedência antes que as
     subexpressoes do próximo nível sejam avaliadas.  Para as múltiplas
     atribuiçoes in-line, as operaçoes de cada nível sao executadas da
     esquerda para a direita; múltiplas atribuiçoes in-line sao executadas
     da direita para esquerda.  A ordem de precedência de para operadores,
     por categoria, é a que segue:

     1. Pré-incremento e Pré-decremento
     2. String
     3. Data
     4. Matemática
     5. Relacional
     6. Lógica
     7. Atribuiçao
     8. Pós-Incremento e Pós-Decremento

     A porçao de nao-atribuiçao do operador de atribuiçao composto(por
     exemplo, a porçao de multiplicaçao de *=) existe no nível 2, 3 ou 4
     dependendo da operaçao, e a operaçao de atribuiçao existe no nível 7.

     Precedência dentro de uma Categoria

     Para evitar que você necessite usar parênteses em expressoes
     complicadas e para assegurar que expressoes equivalentes tenham o mesmo
     resultado, Clipper usa uma ordem pré-estabelecida para avaliar
     expressoes da mesma categoria.

       Pré-Incremento e Pré-Decremento

        Como mencionado anteriormente, o prefixo e sufixo dos operadores de
        incremento e decremento sao considerados como categorias separadas
        por que tem níveis diferentes de precedência.  Esta categoria
        refere-se a forma de prefixo dos operadores de incremento e
        decremento.

        Ambos operadores nesta categoria (++ e --) existem no mesmo nível de
        precedência e sao executados da esquerda para direita.

       String

        Os operadores de concatenaçao de strings (+ e -) existem no mesmo
        nível de precedência e sao executados da esquerda para a direita.

       Data

        O único operador realmente data é o operador de subtraçao (-) de uma
        data de outra.  Subtraçoes de data sao executadas da esquerda para a
        direita.

       Matemáticos

        Quando mais de um operador matemático aparece numa expressao, todas
        as subexpressoes sao avaliadas para cada nível de precedência antes
        que as subexpressoes do próximo nível sejam avaliadas.  Todas as
        operaçoes de cada nível sao executadas da esuqerda para a direita. A
        ordem de precedência para operadores matemáticos é:

        1. Unário positivo e negativo (+, -)
        2. Exponenciaçao (**, ^)
        3. Multiplicaçoo, divisao, e módulo (*, /, %)
        4. Adiçao e subtraçao (+, -)

       Relacional

        Todos os operadores relacionais existem no mesmo nível de
        precedência e sao executados da esuqerda para a direita.

       Lógicos

        Como os operadores matemáticos, os operadores lógicos também tem uma
        ordem estabelecida de precedência.  Quando mais de um operador
        lógico aparece numa expressoo, todas as subexpressoes sao avaliadas
        para cada nível de precedência antes que as subexpressoes do nível
        seguinte sejam avaliadas.  Todas operaçoes de cada nível sao
        executadas da esquerda para a direita.  A ordem de prededência para
        os operadores lógicos é:

        1. Negaçao unária (.NOT.)
        2. E lógico (.AND.)
        3. Ou lógico (.OR.)

       Atribuiçao

        Todos operadores de atribuiçao existem no mesmo nível de precedência
        e sao executados da direita para a esquerda. Para operadores
        compostos, a porçao de nao atribuiçao (por exemplo, adiçao ou
        concatenaçao) da operaçao é executada primeiro, seguida
        imediatamente da atribuiçao.

        As operaçoes de incremento e decremento existem no seu próprio nível
        de precedência, e nao sao parte da categoria de atribuiçao.

       Pós-Incremento e Pós-Decremento

        Ambos operadores nesta categoria (++ e --) existem no mesmo nível de
        precedência e sao executados da esquerda para a direita.

       Parênteses

        A ordem de precedência para avaliaçao pode ser ignorada desde que
        utilizemos parênteses.  Quando os parênteses estao presentes numa
        expressao, todas as subexpressaes dentro de parênteses sao avaliadas
        primeiro usando as regras de precedência descritas nesta seçao, se
        necessário.  Se os parênteses estiverem aninhados, a avaliaçao é
        executada iniciando do par mais interno para o par mais externo.

        Note que embora a linguagem Clipper forneça uma ordem específica de
        precedência para avaliar expressoes, é uma prática de programaçao
        mais adequada explicitamente agrupar operaçoes para aumentar a
        legibilidade e para assegurar que a execuçao atenda suas
        expectativas.