2011年07月11日

Hello, counter

Web1.0時代は、「あなたは○○人目の来訪者です」というカウンタをつけるのが流行っていました。
このチープ感あふれる仕組みを含むページを作ってみましょう。

OPAには組み込みのデータベースがあり、dbの後に続けてパスを指定することでデータベースの構造を定義できます。データベースには「型」を指定する必要があります。カウンタはどう考えても整数ですから、整数を表すint型を指定しましょう。

incr_countは、データベースの値を取ってきて、1増やした値をデータベースに入れ、増やした後の値を返す手続き(opaではこれを関数と呼びます)です。あとは、incr_count()を呼ぶたびカウンタ増えるよぽぽぽぽ〜んという寸法です。簡単ですね?

データベースの初期値はどうなるか、気になる人も居ると思います。データベースの初期値は、型によって決まります。intの場合は0が入りますので、このdbの値は0からスタートします。1増やした後の値を返していたのはこういう理由からです。

あとは、ソースファイルをコンパイルすれば、サーバーができあがります。繰り返しますがopaのデータベースは組み込みですので、ライブラリを持って行ったり、DBの設定をする必要はありません。

この実装を見て「あれ、ロックは?」と思った方。ごもっともです。次の回で詳しく説明します。


db /counter : int

incr_count() = (
c = /counter
do /counter <- c + 1;
c
)

hello() =
<p>
あなたは{
incr_count()}番目のお客様です。
<
/>

server =
Server.one_page_server("Hello", -> hello())


(次回に続く)
posted by chun at 23:32| OPA