[解決済み] パワーシェルでのNull合体
質問
powershellにnull合体演算子はありますか?
このようなc#のコマンドをpowershellでできるようにしたいのですが。
var s = myval ?? "new value";
var x = myval == null ? "" : otherval;
どのように解決するのですか?
パワーシェル 7+
Powershell 7 の紹介 ネイティブの NULL 合体、NULL 条件付き代入、および Powershell の三項演算子が導入されました。
Null合体
$null ?? 100 # Result is 100
"Evaluated" ?? (Expensive-Operation "Not Evaluated") # Right side here is not evaluated
Null条件付き代入
$x = $null
$x ??= 100 # $x is now 100
$x ??= 200 # $x remains 100
三項演算子
$true ? "this value returned" : "this expression not evaluated"
$false ? "this expression not evaluated" : "this value returned"
以前のバージョン
Powershell Community Extensionsは不要で、Powershell標準のif文を式として使用することができます。
variable = if (condition) { expr1 } else { expr2 }
で、最初のC#の式の置き換えに。
var s = myval ?? "new value";
は以下のいずれかになります(好みに応じて)。
$s = if ($myval -eq $null) { "new value" } else { $myval }
$s = if ($myval -ne $null) { $myval } else { "new value" }
または、$myvalが何を含むかによって、使用することができます。
$s = if ($myval) { $myval } else { "new value" }
であり、2番目のC#式も同様にマッピングされる。
var x = myval == null ? "" : otherval;
になる
$x = if ($myval -eq $null) { "" } else { $otherval }
さて、公平を期すために、これらはあまりきびきびしておらず、C#フォームのような使い心地にはほど遠いものです。
また、より読みやすくするために、非常にシンプルな関数でラップすることを考慮してもよいかもしれません。
function Coalesce($a, $b) { if ($a -ne $null) { $a } else { $b } }
$s = Coalesce $myval "new value"
またはIfNullとして可能性があります。
function IfNull($a, $b, $c) { if ($a -eq $null) { $b } else { $c } }
$s = IfNull $myval "new value" $myval
$x = IfNull $myval "" $otherval
ご覧のように、非常にシンプルな関数が、かなり自由な構文を与えることができます。
UPDATE: ミックスで考慮すべき1つの追加オプションは、より一般的なIsTrue関数です。
function IfTrue($a, $b, $c) { if ($a) { $b } else { $c } }
$x = IfTrue ($myval -eq $null) "" $otherval
そして、Powershellの演算子のようなエイリアスを宣言する機能を組み合わせると、次のようになります。
New-Alias "??" Coalesce
$s = ?? $myval "new value"
New-Alias "?:" IfTrue
$ans = ?: ($q -eq "meaning of life") 42 $otherval
明らかに、これはすべての人の好みに合うわけではありませんが、あなたが探しているものであるかもしれません。
Thomas が指摘するように、C# バージョンと上記のバージョンのもうひとつの微妙な違いは、C# は引数の短絡処理を行いますが、関数/エイリアスを含む Powershell バージョンは常にすべての引数を評価することです。もしこれが問題であれば
if
という表現形式を使います。
関連
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
PowerShell DSC コンポーネント xExchange をリリースしました。
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] JavaScriptに「NULL合体」演算子はありますか?
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] NULL-COALESCING 演算子のカスタム暗黙変換の不思議な挙動
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] PHPの三項演算子とNULL合体演算子の比較
-
[解決済み] C#のnull-coalescing演算子に相当するPythonの演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
デジタル署名のないスクリプトはPowerShellで実行されない
-
win10のスタートメニューと通知センターが開けないのをpowershellで解決する。
-
PowerShellでのmatchコマンドの使用方法について解説
-
PowerShell 配列の複数の入力メソッド
-
PowerShellのエスケープ文字とは何ですか?
-
コンソールに緑のチェックマークを挿入するPowerShellの実装
-
PowerShellでプログラム的にIEのキャッシュを空にする
-
PowerShellで文字列を別行動で表示する2つの方法
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] ?? 空文字列のための合体?