さて、というわけで基本中の基本。まずは文字を表示しましょうかね。
わけの分からない項目をついに抜けて、やっとまともな部分に辿り着いたと思ったあなた。甘いよ(マテ
そんな先行き大丈夫かと思わせる文章を書いたところで説明です。――コンピューターに仕事させるには、命令をする必要があるのは1-1で分かっていますね? HSPではその命令文の事を命令と呼ぶっていうかそのまんまです。「ステートメント」とも言います。
当然、画面に文字を表示させるにも命令をする必要があります。画面に文字を表示するには、内蔵命令を使用します。HSPで画面に文字を表示させる命令は、mesです。もしくは、printです。どちらを使っても全く同じ結果になりますが、推奨はmes命令です。
mes "strings" "strings" : 表示するメッセージ、または変数
stringsの部分に、表示させたい文字を入れてくださいな。このとき、’"’(ダブルクォーテーション、引用符)で囲むことと、"mes"の後ろに半角スペースを入れることを忘れないようにしてください。特に、半角スペースを入れないとエラーが出ます。この’"’で囲った部分を、文字列と言います。なお、"’"(シングルクォーテーション)にもそれはそれで違う意味があるので、使い間違いの無いように。
ところでわざわざ「文字列」とつくには意味があります。というのも、「文字」と「文字列」は別物だからです。詳しくは説明しませんが、とにかく「文字」と「文字列」は違うモノだ、ということは覚えておいて下さい。
……さて。何を打てばいいか分からない人。初めての人は、"Hello, world"と打つのが一般的なようです。が、ひねくれてる人はそうでなくても別に怖いお兄さんに怒られたりはしませんからご安心を。
mes "Hello, world"
さて、では好きなように打って、実行(コンパイル+実行)してください。"F5"キーです。これから何度も使うので覚えて置いたほうが効率は上がります。
実行すると、新しいウインドウが開いて、そこにHello, worldと出てきたと思います。"Hello, world"の部分は、命令の後ろに書いた文となります。
先ほどのサンプルの中の、"mes"が「命令(ステートメント・Statement)」です。ではスペースを挟んで後ろにある"Hello, world"の部分は何なのでしょうか。
この部分はパラメータと言います。日本語にして引数(「ひきすう」と読みます)です。HSPのヘルプやドキュメントなどでは、命令を「命令」と書いているのに、引数を「パラメータ」と呼んでいます。日本語か英語か統一しろや、と思うのですが、ここではドキュメントなどの書き方に合わせています。
命令とパラメータは、英語の文法に例えれば、命令が動詞、パラメータは目的語か副詞になります。
mesは「表示する」という動詞だと考えると、パラメータは目的語になります。「何を表示するのか」と聞かれれば、パラメータに渡された値ですから。
そう例えれば、文法は基本的に「(どうする) (何を? どうやって? どんな風に?)」というのをひたすら書いていくことになります。
命令を実行した後、その結果などが返ってくることがあります。
返ってきた値のことを戻り値と言います。
標準命令に限らず、大半の命令の戻り値は、システム変数である(システム変数については『3-1.繰り返し』で)statやrefstrに戻り値が格納されます。どんな値が格納されるかは各命令のヘルプを参照して下さい。
さて、さっきは「"mes"の後ろに半角スペースを入れることを忘れないように」と言いました。これはmes命令に限らず、全ての命令においてそう決められています。このような、書き方の決まりの事を文法と言います。
まず、最も基本的な文法はこれ。
命令(半角スペース)パラメータ
半角スペースを忘れると、HSPはパラメータ部分まで命令だと勘違いして、「そんな命令はありませんよ」とエラーを出すので注意して下さい。
さて、パラメータは複数あることが多々あります。パラメータ同士は",(コンマ)"で区切ります。ここに空白があっても無視されます。例えば、sample 0,1 , 2 , 3なんて無茶苦茶やっても文法的に間違いではありません。が、過度なスペースは見にくいこと極まりないので止めましょう。適度な空白だと、逆に見やすくなります。一般的には", "のように、コンマの後にスペースを入れるようです。
次に、コメントです。比較的大規模なプログラムを書くようになると、コメント無しでは何をやっているのか分からなくなる(忘れる)ことがあります。そこで、プログラムのソースに対してコメントを付けることで、後から見ても見やすくしようというわけです。今の内からコメントを付ける癖を付けておかないと後々大変なことになります。(経験論)
コメントを付けるには、";(セミコロン)"をつけ、後ろにコメントの文を入れます。コメント以降は命令を書こうが何を書こうが無視されます。
mes "どかーん" ;爆発
(アホか僕は)……ここでは、「爆発」の部分がコメントです。命令・パラメータからコメントの間にはいくらでもスペース・タブを入れることが出来ます。結局無視されますから。
他にも、"//(ダブルスラッシュ)"を書いても、コメントと見なされます。また、"/*"から、"*/"までの間もコメントと見なされます。後者の場合は、複数行に渡ったコメント記述が可能です。
mes "どかーん" //爆発
/* っていうかさ、「どかーん」とかサンプルに書いて何がしたいわけ?
意味が分かりませんよ自分。 */
;mes "無視されて表示されません。"
はい、「爆発」と、2、3行目の「っていうか(中略)自分。」、最後の「mes(以下略)」がコメントです。
また、行の先頭にタブを入れて行下げするのが習慣とされています。この行下げをインデントと言います。
mes "インデント"
mes "してもしなくても"
……実行結果に変化はありませんが、読みやすさ向上のために入れることをおすすめします。ちなみに、僕の場合は先頭に"#"が付く命令(プリプロセッサ命令)はインデント無しで書くことにしています。
最後に、マルチステートメントについて説明します。基本的に1行につき1つの命令を記述していくのですが、
mes "マルチステートメントは" : mes "こんな感じで"
この例のように、":"で繋ぐことで、1行の中に複数の命令を書くことができます。この例なら、
mes "マルチステートメントは"
mes "こんな感じで"
と同じです。使いようによっては便利ですが、下手に使うと逆に見にくくなるので多用は避けた方が良いと思います。ちなみに、「複数」と書いたので分かっているとは思いますが、3つ4つと繋げることも可能です。
ところで、mes命令は1回1行ですが(この辺は『3-4.表示位置を変える』で説明しています)、文字列の途中で改行することはできないのでしょうか。
……まあ1つ項目立ててるんだからできるんですけどね、ええ。
改行するには、改行したい位置で"¥n"と入力します(スクリプトエディタのフォントによっては"¥"が"\"(バックスラッシュ)と表示されるかもしれません)。
mes "あんまり横に長いと¥n嫌われるらしいですよ。"
あと、こんな書き方もできます。
mes {"
こうすると
なにも書かなくても
テキストの改行で改行されます。}"
{""}で囲うと、わざわざ改行する記号を入れなくても、スクリプト内の改行で、表示の上でも改行します。この書き方の場合、{"の直後にある改行は無視されます。
文法とは少し外れるのですが、文字列が出てきたのでここで説明してしまいます。
先ほど、「文字列は'"'で囲う」と説明しました。ですが、これでは困ったことが出てきます。それは、「文字列中で"が使えない」という問題です。
例えば、変数aの値は"(aの中身)"です。と表示させるためにこんな風に書いたとしましょう。
mes "変数aの値は"" + a + ""です。"
この辺の書き方については『2-3.計算をさせて表示させる』や『2-4.計算をさせて記憶させる』を参照して下さい。
どうでしょう。変なところでダブルクォーテーションが連続していて、何だかエラーを出しそうです。――実際これはエラーになります。
どうすればちゃんと表示できるのかというと、"¥"(円記号)をダブルクォーテーションの直前に入れれば表示できます。修正してみましょう。
mes "変数aの値は¥"" + a + "¥"です。"
このように、直前に入れる"¥"をエスケープコードと言い、それとセットになっている組(ここでは'¥"')をエスケープシーケンスと言います。また、ある文字にエスケープコードをつけてエスケープシーケンスにすることをエスケープすると言います。
HSPにおけるエスケープシーケンスは'¥"'(ダブルクォーテーション)の他、"¥¥"("¥"そのものを表す)、"¥n"と"¥r"(どちらも改行)、"¥t"(タブ文字)があります。
これは完全にHSPとは関係ないのですが。
日本語環境では、エスケープコードは大抵"¥"(円記号)と表示されるのですが、英文フォントなんかでは"¥"ではなくて"\"(バックスラッシュ)と表示されるかもしれません。これは文字コードとフォントが絡む問題なので、プログラミングには直接関係しません。
なお、このサイトでは全て"¥"と表記します。
Last Modified: 2008-11-28