2010年04月26日

Seesaaブログ独自タグ内では、2項を超える多項式が書けない

そういえば前回書き忘れてたんだけど、Seesaaブログの独自タグ内では2項を超える多項式が書けない。括弧使えば出来るけど。

例えば、

<% echo(1 + 2) %>

……は可能(期待通り"3"が表示される)だが、

<% ehco(1 + 2 + 3) %>

……は不可能(処理がエラーになるのか、同コンテンツ全てが表示されない)。

どうしても、というならば、前述の通り括弧を使えば出来ない事はない。

<% echo((1 + 2) + 3) %>

……でもこれって、1~9までの総和を求める式書こうと思ったら、

<% echo((((((((1 + 2) + 3) + 4) + 5) + 6) + 7) + 8) + 9) %>

……って書かなきゃいけないって事で。

まぁ、これは流石に書く機会無いだろうけど、Seesaaブログの独自タグ <% if %> で、論理演算する方法の手法使って、ちょっと複雑な条件書こうと思ったら途端に負担となる。

演算処理を実装するのは良いが、なんでこう項中途半端なの……

posted by 天井冴太 at 02:34| Comment(0) | TrackBack(0) | Study | 更新情報をチェックする

2010年04月25日

Seesaaブログの独自タグ内で使用可能な演算を調べてみた。

実は、独自タグ内では算術演算が可能だ。何処まで可能なのか、ハッキリと調べた訳ではないが、加算(+);、減算(-)、乗算(*)が可能なのは確認した。

……と、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

文字列比較

文字列の比較には、eqneを使う。==!=ではない。

コード出力結果
<% 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進数表記不可。

文字列連結はどうやるのだろう?まぁ、必要なさそうな気もするが。

posted by 天井冴太 at 04:31| Comment(0) | TrackBack(1) | Study | 更新情報をチェックする

2010年04月22日

Seesaaブログの独自タグ <% if %> で、論理演算する方法

……を、ずーっと考えてた。
結論、算術演算で何とかなる。

このblogが利用しているblogホスティングサービス、Seesaaブログでは、かなり柔軟なカスタマイズが可能となっている。どれくらいかというと、HTMLを丸ごと書き換える事さえ出来るぐらいだ。

HTMLを書き換える際には、その中にSeesaaブログ独自のタグを埋め込む事になる。『ここにタイトルを入れる』『ここに記事を列挙する』といった指定をするのに。一種のDSLだ。

条件分岐をさせようとした場合、Seesaaブログの独自タグでは次のように書く。


<% if:EXPRESSION %>
  <!-- ここにEXPRESSIONが真の時の内容を記述する -->
<% /if %>

例えば、次のように書く。


<% if:page_name eq 'index' %>
  <p>このパラグラフは、blogのトップページでのみ出力される</p>
<% /if %>

ところが、EXPRESSIONには、複数の条件をAND/OR下ものを書く事が出来ない。例えば、次のような記述は許可されない(そして、パース処理がエラーを吐く為か、何も表示されない)。


<% if:page_name eq 'index' & page_name eq 'archive' %>
  <p>トップページか、過去ログのページで表示させたい。</p>
  <p>……が、上手くいかない。</p>
<% /if %>

<% if:page_name eq 'index' and page_name eq 'archive' %>
  <p>"and"と書いてもダメ。</p>
<% /if %>

<% if:((page_name eq 'index') and (page_name eq 'archive')) %>
  <p>括弧で囲ってもどうにもならない。</p>
<% /if %>

……さてどうしよう?

実は、独自タグ内では算術演算が可能だ。何処まで可能なのか、ハッキリと調べた訳ではないが、加算(+);、減算(-)、乗算(*)が可能なのは確認した。

後は、その特性を利用して、次のように書ける事が分かる。


<!-- 論理和(or) -->
<% if:((page_name eq 'index') + (page_name eq 'archive')) %>
  <!-- snip -->
<% /if %>

<!-- 論理積(or) -->
<% if:((page_name eq 'archive') * (archive_page_name ne 'mday')) %>
  <!-- snip -->
<% /if %>

否定(not)はちょっと思いつかない。page_name eq 'index'page_name ne 'index'のような、条件を逆にする手法ぐらいだろうか。

ラベル:seesaaブログ
posted by 天井冴太 at 04:10| Comment(0) | TrackBack(2) | Hack | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。