about_Return

簡単な説明

現在の範囲 (関数、スクリプト、スクリプト ブロック) を終了します。

詳細な説明

キーワード (keyword)はreturn、関数、スクリプト、またはスクリプト ブロックを終了します。 特定の時点でスコープを終了したり、値を返したり、スコープの末尾に達したことを示したりするために使用できます。

C や C# などの言語に慣れているユーザーは、キーワード (keyword)を使用returnして、スコープを明示的に残すロジックを作成できます。

PowerShell では、Return キーワード (keyword)を含むステートメントがなくても、各ステートメントの結果が出力として返されます。 C や C# などの言語では、キーワード (keyword)でreturn指定された値のみが返されます。

Note

PowerShell 5.0 以降、PowerShell では、正式な構文を使用してクラスを定義するための言語が追加されました。 PowerShell クラスのコンテキストでは、ステートメントを使用して return 指定するものを除き、メソッドからの出力は何もありません。 PowerShell クラスの詳細については、about_Classesを 参照してください

構文

キーワード (keyword)のreturn構文は次のとおりです。

return [<expression>]

キーワード (keyword)はreturn単独で表示することも、次のように値または式を指定することもできます。

return
return $a
return (2 + $a)

次の例では、条件が満たされたreturn場合に、キーワード (keyword)を使用して特定の時点で関数を終了します。 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 では、キーワード (keyword)が使用されていない場合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 使用できます。 次のコードは、コマンドレットと Continue を使用して上記のWrite-Information例をInformationAction修正します。

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 はメンバーの登録を自動的に解除し、パイプラインを通じて一度に 1 つずつ渡します。 これは、PowerShell の一度に 1 回限りの処理が原因です。 詳細については、「about_pipelines」を参照してください

この概念は、数値の配列を返す次のサンプル関数で示されています。 関数からの出力は、パイプライン内のオブジェクトの数を Measure-Object カウントするコマンドレットにパイプされます。

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

スクリプト ブロックまたは関数がコレクションを単一のオブジェクトとしてパイプラインに返すように強制するには、次の 2 つのメソッドのいずれかを使用します。

  • 単項配列式

    単項式を使用すると、次の例に示すように、戻り値を 1 つのオブジェクトとしてパイプラインに送信できます。

    function Test-Return
    {
        $array = 1,2,3
        return (, $array)
    }
    Test-Return | Measure-Object
    
    Count    : 1
    Average  :
    Sum      :
    Maximum  :
    Minimum  :
    Property :
    
  • Write-OutputNoEnumerate パラメーターを指定します。

    このコマンドレットはWrite-Output、NoEnumerate パラメーターと共に使用することもできます。 次の例では、コマンドレットをMeasure-Object使用して、キーワード (keyword)によってサンプル関数からパイプラインに送信されたオブジェクトをreturnカウントします。

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

関連項目