PowerShell 7 処理が空の関数の戻り値


PowerShell 7 処理が空の関数の戻り値

概要

PowerShellで、処理が空の関数{}の戻り値(便宜上$(& {})で表現する )は要素脱落である。 これは単純なnull値である$null-eqで比較すると同じ扱いになる。 しかし実態は異なるので、nullと同じだと考えてはならない

パイプライン処理で要素を変換した場合、$nullは形式上存在する要素とみなされ、 要素数にカウントされる。 しかし、$(& {})は形式上も存在せず、要素数にカウントされない。

PowerShell7で導入された、 Null合体演算子値A ?? 値B(値Aを基本返すが、値Aが$nullの時は値Bを返す)で、 その違いを示す。

コード例

以下のコードは出力が要素数1つの配列@(1)である。

$null, 0|ForEach-Object {$_ ?? $(& {})};

以下のコードは、出力が要素数2つの配列@($null, 1)である。

$null, 0|ForEach-Object {$_ ?? $null};

まとめ

PowerShellで要素を脱落させる場合は、 $(& {})への変換として実現させることができる。 $null$(& {})はパイプライン処理でのふるまいが全く異なるので、 -eqで比較して同じだからと言って、 実態も同じとは考えてはならない。

  • このエントリーをはてなブックマークに追加

PAGE TOP