値が変わる「仮想空間」
変数という言葉をご存知でしょうか?
おかしな(変)な数ではありません、固定した変わることのない「定数」に対をなす「変動する数」のこと。
また、変数は「バッファ」と呼ばれることもありますから、変数のことだな、と覚えておきましょう。
厳密には、変数ではなく変数が指し示すメモリ(保存)領域を指し示しますから、
ウィンドウ内情報をメモリに保持しておく時に「画面バッファ」という言い方もされます…。
…さて、上の説明ではイマイチわかりにくいのでこの変数というモノを説明する時、
様々なサイトで「容器(入れ物)」を例に話を進めていますが、そのイメージ通りで、
数字や文字列を一時的(恒久でも構いませんが。)に貯めておく箱と思ってもらって結構です。
前章で、メッセージ表示を行いましたね。
その時に表示したメッセージは「定数」と呼ばれ、何度実行しようとも同じメッセージでした。
他から刺激を与えようとも、あのメッセージは変わることはありません。
今回解説する変数を使用することで、メッセージの内容を意のままに変更できます。
mes命令のパラメータに「あいうえお」や「123」等の定数ではなく変数を与えてやれば、
mes命令は指定された変数に入っている値を出力しようとしてくれるのです。
どのようにパラメータに変数を指定するのかと言うと、
2章のmes命令のところでチラッと触れた「メッセージが0と表示されてしまう」ものを書けばよいのです。
あの時、数字ではなく文字列をダブルクォーテーションで囲まないと0と表示されると言うものでしたね。
mes a
mes abcdef
mes ABCDEF
; mes #+!*%
; mes This is a pen.
mes abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890
mes abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456543210
|
上に示したものはほとんどが変数になります。
「59バイト以内の数字から始まらず記号を含まないモノ」を変数とすることが可能です。
つまり、1行目のものでも十分に変数の条件として成り立っているわけです。
2行目や3行目のものでもOKでしょう。
問題はありませんが、HSPの変数規約として英字の大文字小文字は同一変数として扱います。
ですので2行目も3行目も区別しませんし、例えば「AbCdeF」のようなものも一緒にされます。
4行目なんて英数字以外を使用しているので完全にアウトで、
5行目も変数名の間にスペースを挟んでいますし、最後の記号もダメなのですがエラーになりません。
行頭に「;」が書かれていますが、実はこの行頭の「;」はHSPでコメント開始の合図なのです。
コメントとは、この変数説明の後で説明しますが、「HSPに解釈されないメモ書きのこと」。
標準エディタを使用している方はコメントの行だけが緑色(デフォルト)で表示されていると思いますが、
行頭の「;」を外すと文字色が正常に戻り、実行してもエラーで正常に動作しなくなってしまいます。
コレにより、コメントにしておくと処理がされなくなっていることが理解できると思います。
6行目と7行目の変数にも記号が入っており、変数名も59バイトを超えていますがエラーになりません。
記号はダメと書いていますが、全てがダメなのではなく例外として「_」「@」はOKなのです。
「@」については、使用して問題ありませんがHSPでは意味のある区切り文字として用いられていますので、
使用しないことを推奨いたします。意味については後の章(随分先の話)で改めて解説いたします。
さて、59バイトを超えている件ですが、コレは59バイトを超えてもエラーにはなりません。
ただ、60バイト目以降が変数名として認識されないと言うだけの話です。
つまり、先頭59バイト分が全て同じで60バイト目以降が異なっていても同一変数として扱われる…
かと思ったのですが、60バイトまでが認識の対象となっているようです。
まぁどちらにせよ長い変数名は使いにくいだけですので適度なわかりやすい名前をつけるようにしましょう。
変数には数字から始まらず記号を含まないものと書きましたが、ソレは半角文字の場合です。
全角の場合は記号とみなされませんので使用しても問題ありません。
さて、先程のスクリプトを実行すると2章でも書いた通り、全てが0と表示されました。
変数に何も値を設定していない(初期化していない)場合、0がセットされるようになっています。
実際に値を入れてみましょう。
値の入れ方は、「変数 = 代入する値」という書き方となります。
間のスペースは入れても入れなくても構いません。見やすいようにしてください。
homepage = "http://www.rinku.zaq.ne.jp/ultimate/"
manager = "アルティメット"
mes homepage + "は" + manager + "が管理しています。"
|
1行目2行目で変数に値をセットしています。
3行目で変数に入っている内容を表示しています。
変数と同時に別のメッセージや別の変数を同時に指定する場合は、
3行目のように「+」で連結してあげましょう。
上記の場合は正常に表示されましたが下記を実行してみてください。
year = 2005
month = 11
day = 6
mes "この章を作成した日付は次の通りです。"
mes year + "年" + month + "月" + day + "日"
|
5行目の日付が「2005年11月6日」と表示されずに「2022」と全てを合計した値が表示されてしまいました。
連結させる時も決まりがあり、数値を先に連結してしまうとすべてを加算するようになってしまうのです。
| ・ | 数値 | + | 数値 | = | 数値 |
| ・ | 数値 | + | 文字列 | = | 数値 |
| ・ | 文字列 | + | 数値 | = | 文字列 |
| ・ | 文字列 | + | 文字列 | = | 文字列 |
文字列としたい場合は、先頭が文字列で始まる形に変えてあげるとよいでしょう。
何かいれる文字があるなら良いのですが何もない場合は空文字でOKです。
year = 2005
month = 11
day = 6
mes "" + year + "年" + month + "月" + day + "日"
|
変数には変数自体も当然セットできます。
例えば「A = B」とすれば、変数Bの値を変数Aにセットすることができます。
この考えでいけば「A = A」というものも可能ですね。
ただ、これでは変数Aに変数Aの値をセットすることとなるので、実質何も変化がありません。
一見すると意味がありませんが、応用すると「A = A + 1」というものが使えます。
これは、変数Aに変数Aに1足した値をセットすることを意味します。
コレは様々な場所で使用することとなると思いますので覚えておくようにしましょう。
先程、スクリプトエディタに「コメント」というメモ書きを記述できると書きました。
何のために書くかというと、後でスクリプトを見たときに理解しやすいように、とそれだけの意味です。
どれだけ書こうが最終的(EXE化)にはデータとしては取り込まれませんので、
コメントのエリア内であれば好きなだけ書けばよいでしょう。
コメントエリアと書きましたが、HSPには3タイプコメントの書き方があります。
1つは先程紹介した「;」で、この記号を開始点として以降は同一行であれば全てがコメントとなります。
mes "通常は「;」が開始ポイントであるが、ココはメッセージ内の為、コメントにはならない。"
; 先程書いたように行頭から書くと全てがコメントの行となる。
mes "ココはコメントにはならない" ; がココはコメントである
|
このタイプはHSPで一番初めに用意されたコメントであるため、残されているものです。
当然ですが、1行目のようにメッセージ内に書いたものはコメントの開始とは解釈されません。
2行目、もしくは3行目のように使用するのが一般的です。というかこの使い方しかないわけですが。
1つ目の書き方はこれくらいで置いておいて2つめの書き方を紹介します。
// もう一つのコメント開始合図
; どちらかだけを使うもヨシ、自分なりに意味づけて使用するもヨシ
mes "//当然メッセージはコメントにならない"
|
「//」で、HSP以外のプログラム言語でよく見かけるコメント開始点です。
この「//」も「;」と同じく、同一行のコメント印以降が全てコメントの行となるものです。
意味合いとして全く一緒ですが、今まで別の言語を主流として使用していた人がコメントアウトする際に
CやJAVAと同じコメントが使えた方がわかりやすくて良いから追加されたのではないでしょうか。
コメントとしてはどちらも一緒ですので使いやすいほうを使えばよいと思います。
私個人の使い方としては、メモ書きとして埋め込むのが「;」で開始させ、
一時的にスクリプトの処理を行わないようにコメントアウトするときに「//」を使うように分けています。
何かあった時にグレップ(検索)等が少し楽になりますからね。
/*
複数行コメント。
下記の終了印が来るまで全てがコメント。
*/
|
最後のコメントは先程の2つとは異なり、「/*」から「*/」までがコメントになるタイプです。
開始点以降であれば終了点を別の行であっても書ける為、複数行をコメントにすることが可能です。
ちなみにこのコメントも別言語でよく見かけるもので、デバッグ等で複数行一気にコメントアウトする場合や
下記のようなデコレーションを施したタイトルコメント等に使用されることも多いです。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/*******************
* *
* 第 一 章 *
* *
*******************/
mes "コメントの開始と終了が「/*」と「*/」なっていればよいので"
mes "このような区切りとしても使用しているのを良く見かけます。"
/*******************
* *
* 第 二 章 *
* *
*******************/
mes "ちなみにコレも上記のようにメッセージ内は無効ですよ。"
|
以上で変数とコメントの説明を終わります。