変数は、宣言せずに代入もしない状態では「Undefined」になっている。この変数を文字列として評価して「空白なら何もしない」などのロジックを実装する場合の注意事項。
比較する変数が初出の場合、つまりUndefinedの場合、「#””」いつでもtrueになってif文が通ってしまう。
たとえば次のコードは、未定義の$nameTextを代入なしにいきなりif文で比較している。「名前に空白を渡したら何も実行しない」メソッドのはずが$bodyを返してくる。
//zz_test_Undefined
//20250924 wat
//未定義変数
C_TEXT($1; $name)
$name:=$1
C_TEXT($2; $body)
$body:=$2
C_TEXT($0; $retText)
$retText:=""
If ($nameText#"")
//なにか実行
$retText:=$name+" "+$body
End if
$0:=$retText
引数の名前を変更した際にif文の変数名を変更し忘れたため発生したバグ。このif文は常に成立してしまう。条件が通ってしまうので気付きにくい。呼びだし元は次のように、第1引数を空白にして実行すると「cde」が返ってくる。
//zz_test_Undefined2
//20250924 wat
//未定義変数
$name:=""
$body:="cde"
$retText:=zz_test_Undefined($name; $body)
ALERT($retText)
zz_test_Undefinedの$nameTextを$nameに修正してから、zz_test_Undefined2を実行すると、名前が空白なら$retTextは正しく空白になる。