about_Return
Descripción breve
Sale del ámbito actual, que puede ser una función, un script o un bloque de script.
Descripción larga
La return
palabra clave sale de una función, un script o un bloque de scripts. Se puede usar para salir de un ámbito en un punto específico, para devolver un valor o para indicar que se ha alcanzado el final del ámbito.
Es posible que los usuarios que estén familiarizados con lenguajes como C o C# quieran usar la return
palabra clave para hacer que la lógica de dejar un ámbito explícito.
En PowerShell, los resultados de cada instrucción se devuelven como salida, incluso sin una instrucción que contenga la palabra clave Return. Los lenguajes como C o C# devuelven solo el valor o los valores especificados por la return
palabra clave .
Nota:
A partir de PowerShell 5.0, PowerShell agregó lenguaje para definir clases mediante la sintaxis formal. En el contexto de una clase de PowerShell, no se genera nada desde un método excepto lo que se especifica mediante una return
instrucción . Puede obtener más información sobre las clases de PowerShell en about_Classes.
Sintaxis
La sintaxis de la return
palabra clave es la siguiente:
return [<expression>]
La return
palabra clave puede aparecer sola o puede ir seguida de un valor o expresión, como se indica a continuación:
return
return $a
return (2 + $a)
Ejemplos
En el ejemplo siguiente se usa la return
palabra clave para salir de una función en un punto específico si se cumple un condicional. Los números impares no se multiplican porque la instrucción return sale antes de que esa instrucción se pueda ejecutar.
function MultiplyEven
{
param($number)
if ($number % 2) { return "$number is not even" }
$number * 2
}
1..10 | ForEach-Object {MultiplyEven -Number $_}
1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20
En PowerShell, se pueden devolver valores incluso si no se usa la return
palabra clave .
Se devuelven los resultados de cada instrucción. Por ejemplo, las siguientes instrucciones devuelven el valor de la $a
variable :
$a
return
La siguiente instrucción también devuelve el valor de $a
:
return $a
En el ejemplo siguiente se incluye una instrucción destinada a informar al usuario de que la función está realizando un cálculo:
function calculation {
param ($value)
"Please wait. Working on calculation..."
$value += 73
return $value
}
$a = calculation 14
"Por favor, espere. Trabajar en el cálculo..." string no se muestra. En su lugar, se asigna a la $a
variable , como en el ejemplo siguiente:
PS> $a
Please wait. Working on calculation...
87
Tanto la cadena informativa como el resultado del cálculo se devuelven mediante la función y se asignan a la $a
variable.
Si desea mostrar un mensaje dentro de la función, a partir de PowerShell 5.0, puede usar la Information
secuencia. El código siguiente corrige el ejemplo anterior mediante el Write-Information
cmdlet con un InformationAction
de Continue.
function calculation {
param ($value)
Write-Information "Please wait. Working on calculation..." -InformationAction Continue
$value += 73
return $value
}
$a = calculation 14
Please wait. Working on calculation...
C:\PS> $a
87
Valores devueltos y canalización
Cuando se devuelve una colección desde el bloque de script o la función, PowerShell anula automáticamente los miembros y los pasa de uno a uno a través de la canalización. Esto se debe al procesamiento de uno a uno de PowerShell. Para obtener más información, consulte about_pipelines.
Este concepto se ilustra mediante la siguiente función de ejemplo que devuelve una matriz de números. La salida de la función se canaliza al Measure-Object
cmdlet que cuenta el número de objetos de la canalización.
function Test-Return
{
$array = 1,2,3
return $array
}
Test-Return | Measure-Object
Count : 3
Average :
Sum :
Maximum :
Minimum :
Property :
Para forzar que un bloque de script o una función devuelvan la colección como un único objeto a la canalización, use uno de los dos métodos siguientes:
Expresión de matriz unaria
Mediante una expresión unaria, puede enviar el valor devuelto a la canalización como un solo objeto, como se muestra en el ejemplo siguiente.
function Test-Return { $array = 1,2,3 return (, $array) } Test-Return | Measure-Object
Count : 1 Average : Sum : Maximum : Minimum : Property :
Write-Output
con el parámetro NoEnumerate .También puede usar el
Write-Output
cmdlet con el parámetro NoEnumerate . En el ejemplo siguiente se usa elMeasure-Object
cmdlet para contar los objetos enviados a la canalización desde la función de ejemplo mediante lareturn
palabra clave .function Test-Return { $array = 1, 2, 3 return Write-Output -NoEnumerate $array } Test-Return | Measure-Object
Count : 1 Average : Sum : Maximum : Minimum : Property :