about_Return

簡単な説明

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

長い説明

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

C や C # などの言語に慣れているユーザーは、キーワードを使用 return して、スコープを明示的にするロジックを作成することをお勧めします。

PowerShell では、Return キーワードを含むステートメントを使用せずに、各ステートメントの結果が出力として返されます。 C や C # などの言語では、キーワードによって return 指定された値だけが返されます。

注意

PowerShell 5.0 以降では、正式な構文を使用して、クラスを定義するための言語が追加されました。 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 できます。 次のコードでは、コマンドレット InformationActionContinue を使用して、上記の例を修正して Write-Information います。

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 :

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

  • 単項配列式

    単項式を使用すると、次の例に示すように、戻り値を1つのオブジェクトとして渡すことができます。

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

    Noenumerate パラメーターを指定してコマンドレットを使用 Write-Output することもできます。 次の例では、コマンドレットを使用 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 :
    

関連項目