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