次の方法で共有


about_Return

簡単な説明

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

詳細な説明

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

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

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

Note

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に設定された Continue コマンドレットを使用して、上記の例を修正します。

function Calculation {
    param ($Value)

    Write-Information "Please wait. Working on calculation..." -InformationAction Continue
    $Value += 73
    return $Value
}

ホストに表示する情報メッセージが変数に割り当てられないようになりました。

PS> $a = Calculation 14
Please wait. Working on calculation...
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-Output 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 :
    

関連項目