bleisさんの[C++][Java][C#][F#][JSX]null の扱いエントリーを見てPowerShellのnull扱いをちょっと確認してみました。
PowerShellでnullを呼び出すとどうなるのか
結論からいうと、PowerShellはnullを呼び出してもエラーとはなりません。
※PowerShellのnullは$nullです
function f{ param ($n) switch ($n -eq $null) { $true {Write-Host "this is null"} $false {Write-Host "this is NOT null"} } } $n = $null f($n) #this is null
蛇足ですが、PowerShellでは、事前定義せずいきなり用いた変数は自動的にnull扱いです。。
$a = $null $z -eq $a #True
nullに該当する変数宣言は何のか?
各型で変数宣言して$nullと比較するとこのように…
function f{ param ($a) switch ($a -eq $null) { $true {Write-Host "this is null"} $false {Write-Host "this is NOT null"} } } $a = "" f($a) #this is NOT null $b = 0 f($b) #this is NOT null $c = @{} f($c) #this is NOT null $d = $() f($d) #this is null $e = $null f($e) #this is null
14/Dec/2012 追記 こっちの方が便利? 誰得という突っ込みはわわわわ
function f{ $arrays = @() $arrays += $args | foreach {$_} foreach ($array in $arrays){ switch ($array -eq $null) { $true {Write-Host "$array : this is null"; continue;} $false {Write-Host "$array : this is NOT null"; continue;} } } } $a = "" $b = 0 $c = @{} $d = $() $e = $null f $a $b $c $d $e <# #出力結果# : this is NOT null #$aの結果 0 : this is NOT null #$bの結果 System.Collections.Hashtable : this is NOT null #$cの結果 : this is null #$dの結果 : this is null #$eの結果 #>
18/Dec/2012 追記 Swtichの使い方見直しましたorz 上のは酷い
function f{ switch ($args) { $null {Write-Host "$_ : this is null"; continue;} default {Write-Host "$_ : this is NOT null"; continue;} } } $a = "" $b = 0 $c = @{} $d = $() $e = $null f $a $b $c $d $e <# #出力結果# : this is NOT null #$aの結果 0 : this is NOT null #$bの結果 System.Collections.Hashtable : this is NOT null #$cの結果 : this is null #$dの結果 : this is null #$eの結果 #>
nullを各型にCASTするとどうなるのか?
逆にnullを型変換するとこのようになります。
function f{ param ($a) [string]$s = $a [char]$c = $a [int]$i = $a [bool]$b = $a [PSObject]$p = [object]$o = $a $s #""(空の文字列) $c #'`'(空の文字列) $i #0(対応する数値型の0に対応するオブジェクト) $b #false $p $a #$null $o #$null } $a = $null f($a)
まとめ
結構嫌な感じですね。