条件分岐タグによる真偽判定の結果一覧表
小粋空間さんの記事でMTIfNonEmptyタグは、「MTUnlessタグ+tagモディファイア」で置き換えられます
という文章を見つけました。(現在は修正されています)
その間違いを指摘した後しばらくして、「もしも違ったらどうしよう」と不安になったので検証、ついでに一覧表を作ってみました。
条件分岐タグ
検証を行ったのは数あるMTの条件分岐タグから、汎用的に使える次の四つです。
表にまとめたのは、タグあるいは変数の値の有無を判定した場合の真偽結果です。
変数のテストはMovableType4.261で次のソースを実行して行いました。
MovableType.jpに載っていないだけで、MTIfNonEmpty
とMTIfNonZero
タグは変数に対する判定も行えます。
<MTSetHashVar name="hoge">
<$MTSetVar name="empty" value=""$>
<$MTSetVar name="minus" value="-1"$>
<$MTSetVar name="zero" value="0"$>
<$MTSetVar name="plus" value="1"$>
<$MTSetVar name="string" value="string"$>
</MTSetHashVar>
<MTLoop name="hoge" sort_by="value">
変数の値 :<$MTGetVar name="__value__"$>
MTIf :<MTIf name="__value__">○<MTElse>×</MTIf>
MTIfNonEmpty:<MTIfNonEmpty name="__value__">○<MTElse>×</MTIfNonEmpty>
MTIfNonZero :<MTIfNonZero name="__value__">○<MTElse>×</MTIfNonZero>
MTUnless :<MTUnless name="__value__">○<MTElse>×</MTUnless>
</MTLoop>
値の有無だけを判定するのでeq
をなどの比較演算については扱いません。
タグのテストは色々な方法があります。
ただ、負の数字を格納したタグが見つかりませんでしたので、入力欄に-1を記述する事でタグの値を用意しました。
タグの値 :<$MTBlogName$>
MTIf :<MTIf tag="BlogName">○<MTElse>×</MTIf>
MTIfNonEmpty:<MTIfNonEmpty tag="BlogName">○<MTElse>×</MTIfNonEmpty>
MTIfNonZero :<MTIfNonZero tag="BlogName">○<MTElse>×</MTIfNonZero>
MTUnless :<MTUnless tag="BlogName">○<MTElse>×</MTUnless>
真偽判定の結果一覧表
Trueが真判定、Falseが偽判定になります。
タグの場合も変数の場合も結果が同じだった為、区別せずにまとめました。
MTタグ | タグ/変数の値 | ||||
---|---|---|---|---|---|
空 | -1 | 0 | 1 | 文字列 | |
MTUnless |
True | False | True | False | False |
MTIf |
False | True | False | True | True |
MTIfNonEmpty |
False | True | True | True | True |
MTIfNonZero |
False | True | False | True | True |
わかりやすくするため、MTUnless
タグとMTIf
タグを隣にしてみました。
注目して欲しいのはMTIfNonZero
タグによる空判定の結果です。
MTIfNonEmpty
タグはその名の通り、空と空以外を区別します。
ところがMTIfNonZero
タグは0
と0
以外を区別、とはなりません。
MTIfNonZero
タグは非推奨タグ
MTIfNonZero
タグの判定結果についてSixApartへフィードバックを送った所、仕様だという返事を頂きました。
ご報告いただいたMTIfNonZeroの動作は仕様となります。
ご記述のようなご利用の際は、MTIfタグをご利用下さい。どうぞよろしくお願いいたします。
--
Movable Type 品質保証チームMTIfNonZeroタグで値が空の変数を判定した場合、偽判定されます。
MTIfNonEmptyタグでは値が"0"と""が区別される事ので、MTIfNonZeroタグも同様に逆の判定結果がでると思いました。(中略)
これは不具合ではなく仕様なのでしょうか。
MTIfNonZero
タグの意義はどこに……えっ! MovableType.jpのタグリファレンスが更新されました。
このタグは非推奨です。mt:If タグを利用してください。以下のように記載することで、同様の挙動となります。
フィードバックから一日で更新とは仕事が早いですな。
さらばMTIfNonZero
タグ。
MTIfNonZero
タグからMTIf
タグへの乗り換えはお早めに。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[0]
トラックバックはまだありません。
コメントはまだありません。