2008年10月11日土曜日

スクリプトの話(4)〜一番多い間違い

さて、いよいよ今回からエラーの原因を調べて
スクリプトを動かしていくためのコツについて
書いていきたいと思います。

まず、最初に、スクリプトを書いていて
一番多く出会うエラーは何と言ってもこれでしょう。

ERROR : Syntax error

「syntax(シンタックス)」というのはもともと言語学の言葉で
「統語論」と訳されていますが、
意味の通じる文になるための単語の順番などの決まり……
要するに「文法」ということですね。
シンタックス・エラーというのはコンピュータが、
「これって何か抜けてない? 文になってないよ?
意味わかんないよ〜」
と言っているようなものです。

例えばいつものサンプルスクリプトをいじってみました。

default
{
  state_entry()
  {
    llSay(0, "Hello, Avatar!")
  }

  touch_start(integer total_number)
  {
    llSay(0, "Touched.")
  }
}

これを保存しようとすると、
「(5,4) : ERROR : Syntax error」
と出ました。
最初のかっこの中は行数と文字位置を示しています。
但し0から数えますので、
この例では6行目の5文字目、、、
とすると「}」になります。
何故この「}」がおかしいのでしょう?
本当は、この「}」はおかしくはないのです。
が、コンピュータは、この場所にもっと別のものが来るのを
期待していたわけです。
となるとその前がアヤシイ。。。。
そうです。
llSay(0, "Hello, Avatar!")の後に、
文の終わりを表す「;」が抜けていました。
コンピュータへの命令を表す文の終わりには必ず「;」をつけます。
先ほどの例では「;」がなく、文が終わっていないのに
「}」が出てきたので、コンピュータは、
「まだ文が終わってないのにおかしくない?」と言ったわけです。

大体こんな感じで行番号と文字位置を参考にしながら
エラーの原因を探していきますが、
一番多いのは次のような理由による
「シンタックス・エラー」でしょう。

(1) 文の終わりに「;」が抜けている。
(2) 関数の中で使われているかっこの「(」と「)」の数が合っていない。
(3) 処理のまとまりを表す「{」と「}」の数が合っていない。
(4) 文字列の始まりを表す「"」が終わりの「"」で閉じられてない。

もっとも、最後のものはすぐに気づきます。
何故なら、リンデン・スクリプトのエディターはよくできていて、
ステートと関数は赤い字で、
イベントは水色の文字で表されますが、
文字列がちゃんと「"」で閉じられていないと
最初の「"」以下全ての字が文字列を表す緑色になるからです。
一瞬にして色が変わるので、
すぐに気づきますよ。w

というわけで、「ERROR : Syntax error」と出たら、
まずは上の4つを疑ってみて下さい。
わかってはいても、案外やるもんなんですよね。w

それでは、長くなりましたので
今夏はこの辺で。

No response to “スクリプトの話(4)〜一番多い間違い”

Leave a Reply