実は、独自タグ内では算術演算が可能だ。何処まで可能なのか、ハッキリと調べた訳ではないが、加算(+);、減算(-)、乗算(*)が可能なのは確認した。
……と、Seesaaブログの独自タグ <% if %> で、論理演算する方法で書いたが、ちょっと突っ込んで調べてみた。まぁそこそこ一般的に有りそうな演算子で。もちろん他にもある可能性はあるので、誰か知ってたら教えてくだちぃ。
四則演算
と、剰余演算。剰余演算が通るとは思わなかった。加算減算以外の有効な利用法が思いつかない……
コード | 出力結果 |
---|---|
<% echo(1 + 2) %> | 3 |
<% echo(2 - 1) %> | 1 |
<% echo(1 - 2) %> | -1 |
<% echo(2 * 3) %> | 6 |
<% echo(4 / 2) %> | 2 |
<% echo(3 % 2) %> | 1 |
等号不等号、比較演算
結果が偽になるものは、何も出力されない。真で1が出力されるので、てっきり0かと思っていたので吃驚した。内部的には、nullとかundefinedといった種類の値なんだろうか?特に実害はないようだが。
コード | 出力結果 |
---|---|
<% echo(1 == 1) %> | 1 |
<% echo(1 == 2) %> | |
<% echo(1 != 1) %> | |
<% echo(1 != 2) %> | 1 |
<% echo(1 < 2) %> | 1 |
<% echo(1 <= 1) %> | 1 |
<% echo(2 > 1) %> | 1 |
<% echo(1 >= 1) %> | 1 |
文字列比較
文字列の比較には、eq
とne
を使う。==
と!=
ではない。
コード | 出力結果 |
---|---|
<% echo('foo' eq 'foo') %> | 1 |
<% echo('foo' eq 'bar') %> | |
<% echo('foo' ne 'bar') %> | 1 |
<% if %>の条件判断について
早い話が、「非0は全て真になるのか?」の確認。
一番最後のは、「偽と0を比較したらどうなるか?」を確認している。
コード | 出力結果 |
---|---|
<% if:(1 + 0) %><% echo('TRUE') %><% /if %> | TRUE |
<% if:(0 + 0) %><% echo('TRUE') %><% /if %> | |
<% if:(2 + 0) %><% echo('TRUE') %><% /if %> | TRUE |
<% if:(1 - 2) %><% echo('TRUE') %><% /if %> | TRUE |
<% if:((1==2) == 0) %><% echo('TRUE') %><% /if %> | TRUE |
詳細不明
Seesaaブログは、文法エラーになると、そのコンポーネントは丸々出力されなくなるので、少なくとも以下の記述は正しいものだと思われる。ただし、どういう意味なのか不明。
文字列の文字コードによる比較かと思ったが、そうではないらしい。必ず真になっている。
コード | 出力結果 |
---|---|
<% echo('1foo1' lt '2foo2') %> | 1 |
<% echo('2foo2' lt '1foo1') %> | 1 |
<% echo('1foo1' lt '1foo1') %> | 1 |
<% echo('foo1' gt 'foo2') %> | 1 |
<% echo('foo2' gt 'foo1') %> | 1 |
<% echo('foo1' le 'foo2') %> | 1 |
<% echo('foo1' ge 'foo2') %> | 1 |
その他
累乗は不明(^ではなかった)、ビット演算は不可、所謂宇宙船演算子無し、8進数/16進数表記不可。
文字列連結はどうやるのだろう?まぁ、必要なさそうな気もするが。