about_Operator_Precedence

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TÓPICO

about_Operator_Precedence

DESCRIÇÃO BREVE

Lista os operadores Windows PowerShell na ordem de precedência.

[Este tópico feito com a contribuição de Kirk Munro, um Windows PowerShell MVP de Ottawa, Ontário]

DESCRIÇÃO LONGA

Os operadores do Windows PowerShell permitem que você construa expressões simples, mas poderosas. Este tópico lista os operadores na ordem de precedência. Ordem de precedência é a ordem na qual Windows PowerShell avalia os operadores quando vários operadores aparecem na mesma expressão.

Quando operadores têm a mesma precedência, Windows PowerShell avaliará da esquerda para a direita. As exceções são os operadores de atribuição, os operadores de conversão e os operadores de negação (!, -not, -bnot), que são avaliados da direita para a esquerda.

Você pode usar compartimentos, como parênteses, para substituir a ordem de precedência padrão e forçar o Windows PowerShell a avaliar a parte anexa de uma expressão antes de uma parte não anexa.

Na lista a seguir, os operadores estão listados na ordem em que eles são avaliados. Operadores na mesma linha, ou no mesmo grupo, têm a mesma precedência.

A coluna de operador lista os operadores. A coluna de referência lista o tópico de Ajuda do Windows PowerShell na qual o operador é descrito. Para exibir o tópico, digite "get-help <topic-name>".

    OPERATOR                         REFERENCE 
    --------                         ---------

    $()  @()                         about_Operators

    . (dereference) :: (static)      about_Operators

    [0] (index operator)             about_Operators

    [int] (cast operators)           about_Operators
 
    -split (unary) -join (unary)     about_Split, about_Join

    , (comma operator)               about_Operators

    ++ --                            about_Assignment_Operators
 
    -not ! -bNot                     about_Logical_Operators, about_Comparison_Operators

    .. (range operator)              about_Operators
   
    -f (format operator)             about_Operators 
   
    * / %                            about_Arithmetic_Operators
 
    + -                              about_Arithmetic_Operators

O seguinte grupo de operadores têm a mesma precedência. Suas variantes de diferenciação ou não de maiúsculas e minúsculas têm a mesma precedência.

    -split (binary)                  about_Split
    -join (binary)                   about_Join
    -is  -isnot  -as                 about_Type_Operators
    -eq  -ne  -gt  -gt  -lt  -le     about_Comparison_Operators
    -like  -notlike                  about_comparison_operators
    -match  -notmatch                about_comparison_operators
    -in -notIn                       about_comparison_operators
    -contains -notContains           about_comparison_operators
    -replace                         about_comparison_operators

A lista continua aqui com os operadores a seguir na ordem de precedência:

    -band -bor -bxor                 about_Comparison_Operators

    -and -or -xor                    about_Comparison_Operators

    . (dot-source)  & (call)         about_Scopes, about_Operators

    | (pipeline operator)            about_Operators

    >  >>  2>  2>>  2>&1             about_Redirection

    =  +=  -=  *=  /= %=             about_Assignment_Operators

EXEMPLOS

Os dois comandos a seguintes mostram os operadores aritméticos e o efeito de usar parênteses para forçar o Windows PowerShell a avaliar a parte da expressão primeiro.

        C:\PS> 2 + 3 * 4
        14
        
        C:\PS> (2 + 3) * 4
        20

O exemplo a seguir obtém os arquivos de texto somente leitura do diretório local e salva-os na variável $read_only.

        $read_only = get-childitem *.txt | where-object {$_.isReadOnly}

É equivalente ao exemplo a seguir.

        $read_only = ( get-childitem *.txt | where-object {$_.isReadOnly} )

Como o operador de pipeline (|) tem precedência maior do que o operador de atribuição (=), os arquivos que o cmdlet Get-ChildItem obtêm são enviados para o cmdlet Where-Object para filtrar antes que eles sejam atribuídos à variável $read_only.

O exemplo a seguir demonstra que o operador de índice tem precedência sobre o operador cast. A primeira expressão cria uma matriz de três cadeias de caracteres. Em seguida, ela usa o operador de índice com um valor de 0 para selecionar o primeiro objeto na matriz, que é a primeira cadeia de caracteres. Finalmente, ele converte o objeto selecionado como uma cadeia de caracteres. Nesse caso, a conversão não tem efeito.

        C:\PS> [string]@('Windows','PowerShell','2.0')[0]
        Windows

A segunda expressão usa parênteses para forçar a operação de conversão a ocorrer antes da seleção de índice. Como resultado, a matriz inteira será convertida em uma cadeia de caracteres (única). Em seguida, o operador de índice seleciona o primeiro item na matriz de cadeia de caracteres, que é o primeiro caractere.

        C:\PS> ([string]@('Windows','PowerShell','2.0'))[0]
        W

No exemplo a seguir, como o operador -gt (maior-que) tem uma precedência maior do que o operador -and (AND lógico), o resultado da expressão será FALSE.

        C:\PS> 2 -gt 4 -and 1
        False 

É equivalente à expressão a seguir.

        C:\PS> (2 -gt 4) -and 1
        False 

Se o operador -and tiver precedência mais alta, a resposta seria TRUE.

        C:\PS> 2 -gt (4 -and 1)
        True 

No entanto, este exemplo demonstra um princípio importante do gerenciamento de precedência de operador. Quando uma expressão é difícil de interpretar, use parênteses para forçar a ordem de avaliação, mesmo quando ela força a precedência de operador padrão. Os parênteses tornam suas intenções claras para as pessoas que estão lendo e mantendo seus scripts.

CONSULTE TAMBÉM

about_Assignment_Operators

about_Comparison_Operators

about_Join

about_Logical_Operators

about_Operators

about_Redirection

about_Scopes

about_Split

about_Type_Operators