Поделиться через


about_Return

Краткое описание

Описывает выход из текущей области действия, которая может быть функцией, скриптом или блоком скриптов.

Подробное описание

Ключевое слово return завершает работу с функцией, скриптом или блоком скриптов. Его можно использовать для выхода из область в определенной точке, для возврата значения или для указания того, что достигнут конец область.

Пользователям, знакомым с такими языками, как C или C#, может потребоваться использовать return ключевое слово, чтобы логика область явной.

В PowerShell результаты каждой инструкции возвращаются в виде выходных данных даже без оператора, содержащего ключевое слово Return. Такие языки, как C или C#, возвращают только значения, указанные return в ключевое слово.

Примечание

Начиная с PowerShell 5.0, в PowerShell добавлен язык для определения классов с помощью формального синтаксиса. В контексте класса PowerShell из метода не выводится ничего, кроме того, что вы указываете return с помощью оператора . Дополнительные сведения о классах PowerShell см. в about_Classes.

Синтаксис

Синтаксис ключевое слово return выглядит следующим образом:

return [<expression>]

Ключевое слово return может отображаться отдельно или за ним может следовать значение или выражение следующим образом:

return
return $a
return (2 + $a)

Примеры

В следующем примере используется return ключевое слово для выхода из функции в определенный момент при выполнении условного условия. Нечетные числа не умножаются, так как оператор return завершает работу до выполнения этой инструкции.

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

В PowerShell значения можно возвращать, даже если return ключевое слово не используется. Возвращаются результаты каждой инструкции. Например, следующие инструкции возвращают значение переменной $a :

$a
return

Следующая инструкция также возвращает значение $a:

return $a

В следующем примере показана инструкция, предназначенная для того, чтобы сообщить пользователю, что функция выполняет вычисление:

function calculation {
    param ($value)

    "Please wait. Working on calculation..."
    $value += 73
    return $value
}

$a = calculation 14

"Подождите. Работа над вычислениями..." Строка не отображается. Вместо этого она назначается переменной $a , как показано в следующем примере:

PS> $a
Please wait. Working on calculation...
87

Как информационная строка, так и результат вычисления возвращаются функцией и присваиваются переменной $a .

Если вы хотите отобразить сообщение в функции, начиная с PowerShell 5.0, можно использовать Information поток. Приведенный ниже код исправляет приведенный выше пример с помощью командлета Write-Information с параметром InformationActionContinue.

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

Возвращаемые значения и конвейер

Когда вы возвращаете коллекцию из блока скрипта или функции, PowerShell автоматически развернет элементы и передает их по одному через конвейер. Это связано с обработкой по отдельности в PowerShell. Дополнительные сведения см. в разделе about_pipelines.

Эта концепция проиллюстрирована следующим примером функции, которая возвращает массив чисел. Выходные данные функции передаются в Measure-Object командлет, который подсчитывает количество объектов в конвейере.

function Test-Return
{
    $array = 1,2,3
    return $array
}
Test-Return | Measure-Object
Count    : 3
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

Чтобы заставить блок скрипта или функцию возвращать коллекцию в конвейер в виде одного объекта, используйте один из следующих двух методов:

  • Выражение унарного массива

    Используя унарное выражение, можно отправить возвращаемое значение по конвейеру в виде одного объекта, как показано в следующем примере.

    function Test-Return
    {
        $array = 1,2,3
        return (, $array)
    }
    Test-Return | Measure-Object
    
    Count    : 1
    Average  :
    Sum      :
    Maximum  :
    Minimum  :
    Property :
    
  • Write-Output с параметром NoEnumerate .

    Командлет также можно использовать Write-Output с параметром NoEnumerate . В приведенном Measure-Object ниже примере командлет используется для подсчета объектов, отправленных в конвейер из примера функции return ключевое слово.

    function Test-Return
    {
        $array = 1, 2, 3
        return Write-Output -NoEnumerate $array
    }
    
    Test-Return | Measure-Object
    
    Count    : 1
    Average  :
    Sum      :
    Maximum  :
    Minimum  :
    Property :
    

См. также раздел