不定(ふてい)なデータを(あつか)
(ぜん)ページの(こた)えから(はじ)めるよ。

A1 「mes "C:\\program files\\hsp\\hsp2.exe"」または「print "C:\\program files\\hsp\\hsp2.exe"
A2 「mes 7\2」または「print 7\2
A3 「<<」
全部(ぜんぶ)あってたかな?3つ()虫食(むしく)問題(もんだい)でHSPとはあまり関係(かんけい)なかったかな…? さぁさぁココでは『変数(へんすう)』というもののお(はなし)だ。 (はじ)めての(ひと)(あな)()くほど()んで(おぼ)えてくれ。 これから(さき)何度(なんど)何度(なんど)()てくるものだよ。 とりあえず(まえ)のページのお(はなし)(つづ)きから…。 (まえ)のページでHSPウィンドウにテキストを表示(ひょうじ)してみたよね? あれはあれでちゃんとしたプログラムだと(おも)う。 しかしスクリプトに直接(ちょくせつ)テキストを()くので… あ、「スクリプト」とはHSPプログラムのソース部分(ぶぶん)のこと。 ソースと()くとまた(むずか)しいですね。 醤油(しょうゆ)とかケチャップとかの調味料(ちょうみりょう)のことではないよ。 なんて()いたらいいんだろうな… ()いていくプログラム(コード)のことだ、としか少ない知識(ちしき)では()えないな。 その一般(いっぱん)にソースコードと()ばれるのをHSPではスクリプト、と()んでるよ。 (はなし)(もど)して、(まえ)やったのは そのスクリプトに直接(ちょくせつ)テキストを()れてきたわけだ。
	mes "1+1"
	stop
これで「1+1」が表示(ひょうじ)されるし、
	mes 1+1
	stop
これで計算結果(けいさんけっか)の2が表示(ひょうじ)されるんだったよね? ちゃんと表示(ひょうじ)される、それでいいじゃないか、と()いたくなるよね。 指定(してい)テキストが表示(ひょうじ)されるのは問題(もんだい)ないよ。それでOK。 ただココでは(れい)にしやすいゲームの場合(ばあい)(かんが)えて。 大体(だいたい)のテキストは()()んだテキストが画面(がめん)表示(ひょうじ)される。 しかし、ゲームの(はじ)めに「プレイするアナタの名前(なまえ)()れてください」。 そういったユーザーに入力(にゅうりょく)をさせるゲームが(かぞ)()れないほどある。 名前(なまえ)入力(にゅうりょく)するゲームは 入力(にゅうりょく)したらそれだけで()わるわけではないはず。 どこかでそのユーザーが()めたデータを表示(ひょうじ)させたりするんだね。 ココで(かんが)えて!ポイントはココだから。 表示(ひょうじ)させるテキストはユーザーが()めるわけ。 プログラムを()むあなたが()めるわけではないんだよね?
	mes "よく来たなサンプルよ"
	stop
こんな(ふう)全部(ぜんぶ)スクリプトに()()むことはできないんだ。 ユーザーは(なに)()れるかわからない。 きちんとコチラが(かんが)えたテキストを()れるかもしれないし 「ああああ」と適当(てきとう)なテキストが入力(にゅうりょく)されるかもしれないわけ。 プログラムを()(とき)表示(ひょうじ)させるテキストが()められないんだ。 「こんにちはああああさん」「こんにちはアルティメットさん」 「こんにちは」と「さん」は不変(ふへん)だけど、(なか)文字(もじ)()わってくる…。 ()()ばしまくったけどこういう(とき)使(つか)うのが『変数(へんすう)』なわけ。 変数(へんすう)とは(なん)か。 (いま)(れい)(なに)をするものなのか想像(そうぞう)できたと(おも)うけど、 どこのプログラムページを()てみてもイメージとして(つぎ)のように()かれている。 「『変数(へんすう)=(はこ)』とイメージすればよい」だ。 いい(たと)えだと(おもう)うので(わたし)もコレで(はなし)(すす)めて()く。 (はこ)()っても中身(なかみ)()まったものではなくて、 (なか)(なん)かを()れられる下記(かき)のような()(もの)のこと。 この用意(ようい)した(はこ)には自由(じゆう)なものを()れることが出来(でき)る。 自由(じゆう)()っても(ぜん)ページに()いたように 「文字列(もじれつ)(がた)」と「数値(すうち)(がた)」の2種類(しゅるい)だけなのだが。 テキストを(わた)す(指定(してい))するのではなく、その変数(へんすう)(わた)してやれば ユーザーが指定(してい)したテキストが(なん)であろうがOKってわけだ。 変数(へんすう)使(つか)(かた)(ぜん)ページの問題(もんだい)回避(かいひ)のトコで 「指定(してい)テキストが『変数(へんすう)』と誤認(ごにん)される」というものがあった。 そこでは「文字列(もじれつ)をダブルクォーテーションで(かこ)まなかった(とき)」とあった。 つまり下記(かき)のようなテキストを()けば、変数(へんすう)になるということ。
	mes variable
	stop
その(はこ)(なに)(はい)っていなかった(初期化(しょきか)してない)場合(ばあい)、 「0(数値(すうち))」と表示(ひょうじ)されてしまう文字列(もじれつ)代入(だいにゅう)する場合(ばあい)、ダブルクォーテーションで(かこ)えばよい。 (はじ)めは(なに)()れないが、文字列型(もじれつがた)としたいという場合(ばあい)は、 ダブルクォーテーション2つ連続(れんぞく)(なら)べればOKだ。 そうそう、肝心(かんじん)()(かた)についてだけど、 「1+2=3」というように左辺(さへん)演算(えんざん)(おこな)われ、 右辺(うへん)(こた)えが代入(だいにゅう)されるといったような 算数(さんすう)のやり(かた)ではなく(ぎゃく)になることに注意(ちゅうい)してほしい。 (ぎゃく)とは「3=1+2」といった(かんじ)じのこと(そのまんまだ)。 (した)のサンプルだと変数(へんすう)variableに「""(空文字(からもじ))」を入れる(かん)じ。
	variable = ""
	mes variable
	stop
中学(ちゅうがく)くらいに一次(いちじ)二次(にじ)関数(かんすう)というもの(なら)ったよね? その(とき)に「y = 3x + 2」といった(かん)じだったけどほとんど(おな)じだ。 xに(はい)っている(あたい)を3(ばい)して2を()したものをyに()れる、といったもの。 変数(へんすう)(はこ)(はこ)だと()っているがどこがそうかと()うと、 変数(へんすう)(べつ)変数(へんすう)(わた)せばコピー(移動(いどう)ではない)できる。 一度(いちど)(はい)ったデータを()したければ、数値(すうち)なら0を、 文字(もじ)文字列(もじれつ)ならダブルクォーテーションを()れればよい。 ダブルクォーテーションでの間違(まちが)いが(おお)いので1つ()(くわ)えておく。 コレは変数(へんすう)(から)にしているのではないということを(おぼ)えておいてネ。 それがどうしたのかということやなぜかという質問(しつもん)(こた)えはココでは()かない。
	var1 = "コピー"
	var2 = var1
	var1 = ""
	mes var1
	mes var2
	stop
また(はこ)には「()れることのできる容量(ようりょう)」というのがあるように、 変数(へんすう)にもサイズが()まっており、ある以上は()れられない。 文字列(もじれつ)であれば63文字(もじ)という中途半端(ちゅうとはんぱ)(?)な(かず)だけ、 数値(すうち)であれば(ぜん)ページで()いた「-2147483668〜2147483667」だけ。 64()以上(いじょう)(なが)〜いテキストを()れたい場合(ばあい)は、 変数(へんすう)自体(じたい)のサイズを()やす命令(めいれい)使(つか)えばいけるんだけど それだけで大分(だいぶ)()びるのでココでは説明(せつめい)しない…。 現段階(げんだんかい)使用(しよう)すると「バッファオーバーフロー」エラーが()ちゃう。 文字列(もじれつ)場合(ばあい)であれば、 変数(へんすう)サイズを変化(へんか)することで上限(じょうげん)()えられるんだけど、 数値(すうち)(あつか)桁数(けたすう)変更(へんこう)は…(むずか)しいよ。
	variable = "変数の使用できるサイズを変更しなければコレを実行したときのようにエラーが起きる"
	stop
えっ?上記(じょうき)は63文字(もじ)もないのにエラーになっている? ()(かた)(わる)かった。63()というのは半角(はんかく)での(かず)半角(はんかく)全角(ぜんかく)(ちが)いは()ってるよね?一応(いちおう)()こうか…。 半角(はんかく)というのは全角文字(ぜんかくもじ)半分(はんぶん)サイズしかないからで、 1バイト文字(もじ)とも()ばれ、その(とお)り1文字(もじ)1バイト使(つか)文字(もじ)だ。 全角文字(ぜんかくもじ)は2バイト文字(もじ)()ばれ、1文字(もじ)2バイト使(つか)われる。 ちなみにコレはWINDOWSの文字(もじ)コード「SHIFT-JIS」の場合(ばあい)なんだけど。 ソレで変数(へんすう)(あつか)えるのは63()ではなく、63バイト(ぶん)だということ。 ひらがなや漢字(かんじ)だと30文字(もじ)ほどしか(あつか)えないので()をつけて。 そうそう変数(へんすう)名前(なまえ)だけど、()けられる文字(もじ)には()まりがある。 まず使(つか)える文字(もじ)について。 使(つか)えるのは英数字(えいすうじ)日本語(にほんご)の1,2バイト文字(もじ)基本(きほん)記号(きごう)については全角(ぜんかく)はどれでもいけるんだけど、 半角記号(はんかくきごう)はアンダーバー「_」だけとなっているよ。 アット「@」でもエラーにはならないんだけど(べつ)意味(いみ)使用(しよう)されていて、 「@」の()いているものといないものは(おな)じものとして(あつか)われるのでダメだ。 変数名(へんすうめい)として使(つか)えるか(いな)かは、 実際(じっさい)使用(しよう)すれば使(つか)えないものがエラーとなるので()かる。 (つぎ)開始文字(かいしもじ)について。 1文字(もじ)()には半角(はんかく)数字(すうじ)()てはならない。 それ以外(いがい)使用(しよう)できる文字(もじ)であれば問題(もんだい)ないことでしょう。 (つぎ)文字数(もじすう)について。 変数名(へんすうめい)最大(さいだい)文字数(もじすう)()まっている。 半角(はんかく)で59文字(もじ)、つまり59バイト以内(いない)であればOKである。 この上限(じょうげん)()えてもエラーにはなることはないが、 その変数(へんすう)()れたデータをどうすることもできないだけである。 数値(すうち)演算(えんざん)はおろかデータを入れて表示(ひょうじ)しても「0」となるだけ。 最後(さいご)変数(へんすう)(かず)について。 変数(へんすう)何個(なんこ)でも使(つか)えるというわけではないよ。 最大(さいだい)で4096()までしか使(つか)えないことになっているようだ。 4000()宣言(せんげん)したことないからどうなるかはしらない…。 まぁこれについては(みんな)もそんなに()かないだろうから()にしなくていいだろう。 さて、ココでプチ重要(じゅうよう)なポイントを。 使(つか)える文字(もじ)といってなんでもイイというものではないだろう。 「a」や「xxx」などパッと()ただけで()かりにくいものは、(あと)苦労(くろう)するよ。 ()かりやすいネーミングをつけるように心掛(こころが)けよう。 ()かりやすいからと()っても(なが)い(文字数(もじすう)(おお)い)名前(なまえ)もどうかと(おも)う。 ココで、よく使(つか)われる手法(しゅほう)説明(せつめい)しておこう。 …といっても、正式(せいしき)もクソもない、管理人(かんりにん)がよく使(つか)うやり(かた)だけどね。 変数(へんすう)だけでなく、命令名(めいれいめい)でもよく使(つか)われるのだけど、 1単語(たんご)を3,4文字(もじ)(くらい)(あらわ)し、変数(へんすう)一部(いちぶ)として使用(しよう)する。 (なん)でもいいけど、(たと)えば(なに)かを変更(へんこう)したい(とき)使(つか)うということで用意(ようい)した 「change」という変数名(へんすうめい)使(つか)いたい(とき)、について。 場合(ばあい)場合(ばあい)で3,4文字(もじ)(えら)(かた)(ちが)うけど、パっと()(もと)がわかるように。 で、「change」だと「chg」が一般的(いっぱんてき)ではないかな。 「parameter」だと「param」、もっと(みじか)いのだと「prm」かな。 大体(だいたい)母音(ぼいん)aiueo」を()いた文字(もじ)(おお)いかな? 一時変数名(いちじへんすうめい)には、一時的(いちじてき)という意味(いみ)をもつ「temporary」を(もと)にした、 「temp」や「tmp」が(おお)いだろうね。 数値用(すうちよう)文字列用(もじれつよう)一時変数(いちじへんすう)使(つか)いたい場合(ばあい)は、 「temporary number」「temporary string」を(もと)にした、 「tmpnum」「tmpstr」な(かん)じで。 …あ、そうそう。()くの(わす)れてた。 HSPでは、半角(はんかく)英字(えいじ)(かぎ)大文字(おおもじ)小文字(こもじ)区別(くべつ)しない。 つまり、(した)のように()いても(まえ)()いた変数(へんすう)認識(にんしき)される。
	TMP = "大文字のTMP"
	mes tmp
	stop
(ぜん)ページで()いておくべきことだったんだけどココで()く。 連結(れんけつ)についてなんだけどね。 「数値(すうち)数値(すうち)」は演算結果(えんざんけっか)表示(ひょうじ)されることを (すで)()ってるはずだ。 「数値(すうち)文字列(もじれつ)」の表示(ひょうじ)場合(ばあい)はどうか。 文字列(もじれつ)がダブルクォーテーションで(かこ)まれた数値(すうち)場合(ばあい)、 「数値(すうち)数値(すうち)」と(おな)じで結果(けっか)表示(ひょうじ)されるが、 「A」や「あ」、「_」といった文字(もじ)記号(きごう)だとこれらは表示(ひょうじ)されない。 「文字列(もじれつ)数値(すうち)」の場合(ばあい)(うえ)(おな)じだろうか? コレの場合(ばあい)はそれぞれの(こう)のデータ(すべ)てを表示(ひょうじ)させることができる。 ただし、文字列(もじれつ)(がわ)文字列型数値(もじれつがたすうち)場合(ばあい)(ほか)(とき)のように演算(えんざん)(おこな)われることはなく、 「"1"+2」は「12」のように文字列(もじれつ)として連結(れんけつ)されるだけである。 「文字列(もじれつ)文字列(もじれつ)」の場合(ばあい)。 コレも(うえ)の「文字列(もじれつ)数値(すうち)」と(おな)じで、 文字列(もじれつ)として連結(れんけつ)されるだけである。 コレは(ぜん)ページで()いておくべきだったと()うように、 mes命令(めいれい)のパラメーター部分(ぶぶん)使(つか)われることが(おお)い。 変数(へんすう)場合(ばあい)使(つか)われるのでココでも(わる)くはないのだが。 連結(れんけつ)半角(はんかく)の「+」記号(きごう)(つな)がれる。
	mes 100 + 21
	var = 39 + "abc"
	mes var
	mes 4 + "8xyz"
	var = "5" + 32
	mes var
	stop
(あつか)える範囲(はんい)であれば何個(なんこ)でも連結(れんけつ)させることが可能(かのう)だ。
	var1 = 123
	var2 = 987
	var3 = var1 + var2
	mes "「" + var1 + "+" + var2 + "」の結果は「" + var3 +  "」だ"
	stop
おさらいとして初めのRPG風メッセージを表示させるなら、
	name = "アルティメット"
	mes "よく来たな"+name+"よ"
	stop
と、上のようになるわけだけど、 しかしこれじゃあ(あたい)直接プログラムに()()んでいて、 1(かい)にまとめて()いたのと結果的(けっかてき)一緒(いっしょ)だ、ということになるね。 (たし)かにそう、この書き(かた)じゃ変数(へんすう)意味(いみ)がない。 ユーザーに入力(にゅうりょく)選択(せんたく)をさせるっていう「操作(そうさ)」が必要(ひつよう)だ。 けどココは変数(へんすう)説明(せつめい)だけなのでまだ解説(かいせつ)しない。 プログラムを()(うえ)必要(ひつよう)となる()(もの)変数(へんすう)(おぼ)えておこうね。 さぁてこのページ最後(さいご)()めくくりをしようか…。 下記(かき)スクリプトなんだけどどういうことか()かるかな?
	variable = 1
	variable = variable + 1
	mes variable
	stop
そのまんま素直(すなお)(かんが)えていけば()かると(おも)うけど、 1行目(ぎょうめ)変数(へんすう)variableに1を()れている。 2行目(ぎょうめ)variable現在(げんざい)variable(あたい)と1を()して()れている。 3行目(ぎょうめ)表示(ひょうじ)している、というプログラムだ。 (べつ)加算(かさん)以外(いがい)減乗除余算(げんじょうじょよざん)どれでも使(つか)えるよ。 また加減算(かげんざん)だけ特別(とくべつ)下記(かき)()(かた)(ゆる)されている。
	variable = 5
	variable++
	mes variable
	variable--
	mes variable
	stop
コレはインクリメント・デクリメント演算子(えんざんし)()ばれ、 あらゆるプログラミング言語(げんご)使用可能(しようかのう)演算子(えんざんし)だ。 サンプルを()れば()かることと(おも)うが、 (もと)(あたい)に1加減(かげん)する(とき)容易(ようい)()けるものである。 HSPでは演算子(えんざんし)を2つ(かさ)ねなくても1つだけでもエラーにはならないようだ。
	variable = 3
	variable-
	mes variable
	variable+
	mes variable
	stop
2以上(いじょう)加減(かげん)したいという(とき)には 代入演算子(だいにゅうえんざんし)というものを使用(しよう)する。 代入演算子(だいにゅうえんざんし)とは「+=」「-=」といったもので、 左辺(さへん)変数(へんすう)右辺(うへん)(ぶん)だけ増減(ぞうげん)するもの。
	variable = 7
	variable += 2
	mes variable
	variable -= 4
	mes variable
	stop
コレの(ほか)に「*=」や「>>=」などといった代入演算子(だいにゅうえんざんし)があるが、 残念(ざんねん)ながらHSPでは使用(しよう)することができない。 その()わりコレもまたHSP特別(とくべつ)()(かた)として 下記(かき)のように()くことができる。
	variable = 8
	variable + 6
	mes variable
	variable - 5
	mes variable
	stop
コレで()わりだ。 このページでの宿題(しゅくだい)発表(はっぴょう)しよう。 ちなみに1(もん)だけだ。イイのが(おも)()かばなかった…。
Q4変数(へんすう)「X」に「0123」を()れて「Xには0123が入っています」と表示(ひょうじ)させよ
6ページへ進む 4ページへ戻る