次の方法で共有


about_Return

簡単な説明

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

長い説明

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

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

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

注意

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

構文

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

return [<expression>]

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

return
return $a
return (2 + $a)

次の例では、条件が満たされたreturn場合に、キーワード (keyword)を使用して特定の時点で関数を終了します。 戻り値ステートメントは、そのステートメントを実行する前に終了するため、奇数は乗算されません。

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

「お待ちください。 計算に取り組んでいます...string は表示されません。 代わりに、次の例のように変数に $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 :

スクリプト ブロックまたは関数がコレクションを 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使用して、キーワード (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 :
    

こちらもご覧ください