WWW におけるもっともポピュラーなクライアントサイドスクリプト言語である JavaScript について簡単に紹介しよう。もっとも,JavaScript だけで 1 冊の本が出るくらいなので,ここでは本当に“さわり”だけである。
JavaScript は Netscape Navigator 2.0 で搭載されたスクリプト言語である。現在は,ECMAScript として規格化され,JavaScript はその実装の一形態という位置付けになっている。Internet Explorer での JScript も,ECMAScript の実装のひとつということになる。Java とつくからにはアプレット作成の Java と似ているのではないかと思われるかもしれないが,実際,似ている面もあり,根底から異なる部分もある。
まず,コードの書かれ方は,いずれも C,C++ スタイルの記号的な記法で,一見同じように見える。また,“オブジェクト”が重要な役割を持つことも共通している。WWW で用いられることもあって,セキュリティに引っかかるような動作は(Java において,アプレット作成では)制限されている。共通なもっとも優れた点は,“動く環境ならプラットフォームを選ばない”ことである。
それで,違いはというと,実は“中身はまったく違う”。強いて比較すると,“Java のほうが厳格”である。たとえばデータ格納に用いる変数には型があるが,Java では変数型はスタティックであり,JavaScript ではかなりダイナミックである。よく言えば JavaScript では“変数型をさほど意識しなくてもよい”ということになる。
文法も JavaScript は比較的ルーズである。オブジェクトに関しても,Java の特徴である厳格さ,複雑さが簡単なものになっている。
実行時に関してのメカニズムにも違いがあり,Java のように“いったんコンパイル”の必要はない。
まとめてしまうと,JavaScript は多くの人が簡単に書けるようにやさしくつくられていて,それでダイナミックな処理ができるということである。
JavaScript の大きな特徴はオブジェクトに根ざしているという点である。オブジェクト(ここでは何か“もの”を想像してほしい)は性質を表すプロパティをもっている。卑近な例では,“テレビ”というオブジェクトがあれば,そのプロパティは“電源”“音量”“チャンネル”などであろう。
関数も重要である。一定の手続きをまとめてしまうのである。たとえば,“与えられた自然数の階乗を計算する”関数を作ると,“この自然数の階乗を計算せよ”と呼べば,結果が返ってくる。
オブジェクトに対して何らかの処理をするものをメソッドという。JavaScript は組み込みのメソッドのほかに,関数をオブジェクトに結びつけてメソッドとすることもできる。
それからイベント駆動されうるという点も見逃せない。ユーザの反応に対して関数などが呼び出され,対話型のインタフェースを実現できる。
よく目にする JavaScript を用いたページは用もなくステータスバーを書き換えてみたり,テロップを流してみたりというものばかりだが,小型で簡略だとはいえ,れっきとしたプログラミング言語であり,もっと複雑な処理にも耐えうるつくりになっている。また,最近のスクリプト言語の特徴として,文字列処理を得意とするという一面もある。
ここでは,厳密な話を抜きにして,JavaScript の基礎の基礎を簡単に解説しよう。
データの入れ物としての変数は var
ステートメントで宣言される。JavaScript では型は明示的でないので,数値を入れても文字列を入れても構わない。ただし,文字列は引用する。
var a = 4
var s = "String"
変数 a
には数値 4 を,変数 s
には文字列 String を入れて初期化した。
演算子は四則(+,-,*,/),比較(==,!=,<,>),論理(||,&&,!),ビット操作(<<,>>,|,&)などがある。結果は変数に代入できる。また,インクリメント・ディクリメント演算子(++,--)もある。
var a = 4
var b = a + 3
変数 b
は a + 3
(=5)で初期化される。文字列の連結は + 演算子で行う。
オブジェクトのプロパティの参照は次のように行う。
object.property
object["property"]
関数は関数名と引数(ひきすう)リスト,実行する命令を中かっこでくくって定義する。
function function_name(arg1, arg2, ...) {
...
}
関数から値を返すときは return
ステートメントを使う。
return (式)
関数を呼ぶには,関数名と引数リストを渡す。値を返すものは代入できる。
function_name (arg1, arg2, ...)
たとえば,与えられた数の 3 乗を計算する関数 cube()
を宣言してみよう。
function cube(x) {
return x * x * x
}
3 の 3 乗を関数を呼んで計算し,変数 y
に納める。
y = cube(3)
メソッドは次のかたちで呼ぶ。メソッドが値を返すときは代入できる。
object.method(arg1, arg2, ...)
よく使うメソッドとして HTML 文書を書く document.write()
がある。先ほどの関数 cube
を定義しておいて,
var a = 5
document.write("<P>cubed " + a + " is " + cube(a) + ".<\/P>")
では文書中に“cubed 5 is 125.”と出力される。ちなみに,数値と文字列を“足し算”すると,数値は文字列として結合される。
制御文には条件分岐の if...else
,ループの for
,while
などがある。
if (condition) {
...
} else {
...
}
if
は () 内の条件が満たされると直後の {} を実行し,満たされなければ else
以下の {} を実行する。else
以下 はなくてもよい。
function isNegative(a) {
if (a < 0) {
return "negative"
} else {
return "non-negative"
}
}
上の例において関数 isNegative
は引数 a
が負か否かで分岐し,異なる値を返す。
for (expr1; expr2; expr3) {
...
}
for
は expr1 で式を初期化し,expr2 が満たされている間,1 度ループするごとに expr3 を評価しながら {} 内を繰り返す。
for (i = 0; i <= 10; i++) {
...
}
上の例では,i
を 0 として初期化し,i
が 10 以下である間,1 回のループごとに i
を 1 ずつ増やしながら {} 内を繰り返す。
ここまでの説明では JavaScript をなめた程度にもならない。だが,これ以上深入りするのも本稿の範囲を出ることになるので,いろいろなサイトを巡るなり,書籍を参考にするなりして,必要なスキルを身につけていただきたい。