about_Operator_Precedence
Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
TEMA
about_Operator_Precedence
DESCRIPCIÓN BREVE
Muestra los operadores de Windows PowerShell en orden de prioridad.
[Kirk Munro, MVP de Windows PowerShell de Ottawa (Ontario), aportó este tema].
DESCRIPCIÓN LARGA
Los operadores de Windows PowerShell permiten construir expresiones sencillas pero eficaces. En este tema se enumeran los operadores en orden de prioridad. El orden de prioridad es el orden en que Windows PowerShell evalúa los operadores cuando aparecen varios operadores en la misma expresión.
Cuando los operadores tienen la misma prioridad, Windows PowerShell los evalúa de izquierda a derecha. Las excepciones son los operadores de asignación, los operadores de conversión y los operadores de negación (!, -not y -bnot), que se evalúan de derecha a izquierda.
Se pueden usar los contenedores (como los paréntesis) para invalidar el orden de prioridad estándar y forzar a que Windows PowerShell evalúe la parte de una expresión que está entre paréntesis antes de una parte que no lo está.
En la siguiente lista se enumeran los operadores en el orden en que se evalúan. Los operadores en la misma línea o en el mismo grupo tienen la misma prioridad.
La columna Operador muestra los operadores. La columna Referencia muestra el tema de ayuda de Windows PowerShell en el que se describe el operador. Para mostrar el tema, escriba "get-help <nombre-tema>".
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
El siguiente grupo de operadores tiene la misma prioridad. Las variantes que distinguen mayúsculas de minúsculas y las que no las distinguen de forma explícita tienen la misma prioridad.
-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
La lista queda resumida aquí con los siguientes operadores en orden de prioridad:
-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
EJEMPLOS
Los dos comandos siguientes muestran los operadores aritméticos y el efecto de usar paréntesis para forzar a que Windows PowerShell evalúe primero la parte de la expresión que está entre paréntesis.
C:\PS> 2 + 3 * 4
14
C:\PS> (2 + 3) * 4
20
El siguiente ejemplo obtiene los archivos de texto de solo lectura del directorio local y los guarda en la variable $read_only.
$read_only = get-childitem *.txt | where-object {$_.isReadOnly}
Es equivalente al siguiente ejemplo.
$read_only = ( get-childitem *.txt | where-object {$_.isReadOnly} )
Dado que el operador de canalización (|) tiene mayor prioridad que el operador de asignación (=), los archivos que obtiene el cmdlet Get-ChildItem se envían al cmdlet Where-Object para filtrarse antes de que se asignen a la variable $read_only.
En el siguiente ejemplo se muestra que el operador de índice tiene prioridad sobre el operador de conversión. La primera expresión crea una matriz de tres cadenas. A continuación, usa el operador de índice con un valor de 0 para seleccionar el primer objeto de la matriz, que es la primera cadena. Por último, convierte el objeto seleccionado en una cadena. En este caso, la conversión no tiene ningún efecto.
C:\PS> [string]@('Windows','PowerShell','2.0')[0]
Windows
La segunda expresión usa los paréntesis para forzar que la operación de conversión se produzca antes de la selección del índice. Como resultado, se convierte la matriz en su conjunto en una cadena (única). A continuación, el operador de índice selecciona el primer elemento de la matriz de cadenas, que es el primer carácter.
C:\PS> ([string]@('Windows','PowerShell','2.0'))[0]
W
En el siguiente ejemplo, el resultado de la expresión es FALSE porque el operador -gt (mayor que) tiene una prioridad mayor que el operador -and (AND lógico).
C:\PS> 2 -gt 4 -and 1
False
Es equivalente a la siguiente expresión.
C:\PS> (2 -gt 4) -and 1
False
Si el operador -and tuviera una mayor prioridad, la respuesta sería TRUE.
C:\PS> 2 -gt (4 -and 1)
True
Sin embargo, este ejemplo demuestra un principio importante a la hora de administrar la prioridad de los operadores. Cuando una expresión resulte difícil de interpretar, use los paréntesis para forzar el orden de evaluación, aunque fuerce la prioridad del operador predeterminado. Los paréntesis facilitan la lectura a las personas que leen y mantienen sus scripts.
VEA TAMBIÉN
about_Assignment_Operators
about_Comparison_Operators
about_Join
about_Logical_Operators
about_Operators
about_Redirection
about_Scopes
about_Split
about_Type_Operators