No

Script-Fu の間違えやすい真偽値

前回から時間を空けてScript-Fuを書くと毎回同じミスをするので、自分への戒めをこめて間違えやすいポイントを書いておくことにした。

よくある間違い

Script-Fuではユーザーに入力してもらうための☑チェックボックスを SF-TOGGLE で設定でき、チェックされたときは TRUEが変数に代入され、チェックされなかったときは FALSE が代入される。

そこまではなんの問題もない。問題はこのTRUE,FALSEを使って条件判定をするときだ。

(if FALSE 0 1)

schemeが全く読めない人向けに書いとくと rubyの

if FALSE then
  0
else
  1
end

と同じような意味になる。

当然この処理で “1” が返ってくることを期待してるわけだけど、これだと “0” が返ってくる。

期待通りに動かない理由

これは scheme を知ってる人にとっては当たり前なんだろうけども、scheme で真偽値は #t と #f で表され、それ以外の数値は真として解釈される。だから期待通りの処理をしたければ

(if (= arg TRUE) 0 1) ;argには TRUE か FALSE が入ってる

としなければならない。

果たしてこれを書いたおかげで次回の作成時に覚えておけるかどうかはわからない。 覚えてると良いなあ。

Leave a Reply