テキストを表示してみる
このページではHSPのウィンドウに指定したテキストを表示させるだけですが、
プログラム初めての人必見のエスケープシーケンスの説明や、
演算子について、HSP特有(?)の計算手順があります。
タイトルに書いてるように白色のウィンドウに表示するよ。
いきなりだけどテキストを表示する命令を書く。
その命令名はmesと呼ばれているんだ。
恐らくmessageの略に間違いないと思う。
前のページのようにコレだけを見て早まって勝手に書かないでよ。
別に重大な問題が起きるわけじゃないからやってもいいけどね。
既に書いた人は分かると思うけど「何も起こらない」んだ。
このmes命令はテキストを表示させる命令。
表示するテキストが設定されなきゃ何も表示しないってわけ。
当たり前と言えば当たり前。
表示させるのを設定してないのに表示されるのは嫌だね。
それじゃあどうやって表示させるんだろう?
前のページにも書いたように命令名の前後・間に
余計なもの(スペースはいいが)を入れると
HSPは命令名とは解釈してくれない。
mes文章表示テスト中
stop
じゃあどうすればいいのだろう?
勘のいい人はすぐ気づくだろうが、
命令名とパラメーターの間に区切りを入れてやればいいわけだね。
伸ばすだけ時間の無駄になるから答えを書くと
区切り記号(文字)として半角スペースを入れるんだ。
mes 文章表示テスト中
stop
書いてある通りに書くとうまくいく場合があるけどまだおかしいようだ。
おかしくなりそうな場合を考えてみたよ。
<パターン1>動作するが正しくない結果が表示される その1
『0』と表示される場合は、
指定したテキストが『変数』と言うものだ、と誤認されているよ。
回避策1が後に書いてあるからソレを見てね。
<パターン2>動作するが正しくない結果が表示される その2
全然違う数字が表示される場合は数字の溢れということが原因のようだよ。
回避は出来ないんだけど回避策2に載せているから見てね。
<パターン3>エラーが出る その1
文法が間違ってる、といったエラーが発生する場合は、
指定したテキストが通常の文字や数字じゃなくて
記号からはじまってるんじゃないかな?
コレもパターン1同様、回避策1を見てみると謎が解ける。
<パターン4>エラーが出る その2
「計算式でエラーが発生した」というエラーが出る場合は、
小数点以下もある数字を表示しようとしたんじゃないかな?
コレについては回避策3を見てね。
<パターン5>エラーが出る その3
HSP2ではもう1つの「計算式でエラーが発生した」となるパターン。
「mes 123 stop」といった感じに横に並べてないかな?
コレについては回避策4を見よう。
<回避策1> 文字列として扱う
下記の様にダブルクォーテーション『"』で囲まなけなければならない。
mes "テキスト"
この命令の行の後に何も記述しない場合には
つけなくてもエラーにならないのだけどね。一応はつけよう。
ダブルクォーテーション『"』がないもので数字からはじまらないテキストは
『変数』であるが、記号からはじまるものは変数にはならない。
きちんとダブルクォート・文字・数字から始まってるよという人は
前ページの命令のところで書いたように全角文字で
書かれているかmesの前後に文字が入っているのだと思う。
その場合、行を全削除して書き直そう。
<回避策2> 数字として扱う
ダブルクォーテーション『"』で囲まなくてもたいていは「0」と表示されずに
指定どおりの数字が表示されることと思う。
でもあまり大きい数字や小さい数字(マイナス値)は
オーバーフローやアンダーフローという限界を超えた問題が発生してしまう。
上記の問題は「-2147483668〜2147483667」以外を扱うとなる。
どうなるかというと、全く異なる値となってしまうんだ。
「2147483668」は「-2147483668」、「2147483669」は「-2147483667」と表示される。
しかし、ここで言ってるのは計算用に使う場合の話。
計算することなく表示だけでいいのならこの限りではないよ。
何十桁という大きさのものも入れられるんだ。
文字列としてダブルクォーテーション『"』で囲むとよい。
mes "98765432100"
<回避策3> 小数扱う
整数は回避策2で書いた範囲だけ
扱うことができるけど小数はHSP2で扱うことができないよ。
厳密には全く扱えないわけじゃなく工夫すればいける。
初めて間もない人には滅茶苦茶高度だが。
DLLを使うという手もあるけどね。
どうしても使いたい人はTIPS文字列編を見てね。
初めての人であっても簡単に使えるようにしてるから。
回避策2同様、表示だけならダブルクォーテーションで囲む。
<回避策4> 改行する
1行に命令を並べないで改行しよう。
書けないわけじゃないけど見易さを考えてね。
複数書くのをマルチステートメントというけど、
そのやり方は次のページで。
ふう。
問題のあった人はコレのどれかに当てはまったかな。
これ以外のパターンで分からない時は、
技術掲示板に恥ずかしがらずに聞いてくれていいよ。
回避策で書いたけど表示できるテキストは2種類あるんだ。
1つは文字,文字列テキスト。もう1つは数字テキスト。
表示したものは文字,文字列であれ数字であれ同じもの。
何が違うのかと言うと、数字は計算できるってことだね。
もっと言うと「1+1」というものを文字列として表示させると
「1+1」と画面に表示されることができて、
数値だと「1+1」の計算結果である「2」が表示されるってこと。
計算の書き方は最後に書いてあるからそこを見てね。
「1+1」という文字列として表示したい場合は
回避策で何度も出てきたダブルクォーテーション『"』で囲む。
mes "1+1"
stop
こうすると「1+1」と表示されるだけで計算は行われない。
説明文等で「『1+1』というのは…」と表示したいのに
「『2』というのは…」と表示されちゃうと困るよね?
普通のパターンだと数字は計算に必要だね。
そういう場合、ダブルクォーテーションで囲まずに数字だけ書けばOK。
mes 1+1
stop
さて、いきなりですがここで問題です。
HSPウィンドウに「HSPBCの管理人は"アルティメット"です。」と
鍵カッコ「」で囲んだ中身を全部表示させてみて。
きちんと表示された?
「です。」とだけ表示されちゃった
な〜んて人はいるんじゃないかな…。
いるでしょう?
そう、君の事だよ。
なんで「です。」とだけ表示されたんだろう?
考えてみようね。
実はコレ…HSPのバグなんだ。
ということではないよ。
君の書き方が悪かっただけなんだ。
書いたプログラムをもう一度よく見てほしい。
mes "HSPBCの管理人は"アルティメット"です。"
stop
と全く同じことを書いたんだよね?
コレを分解して考えていってみよう。
mes命令は「ダブルクォーテーションで囲んだモノがパラメーター」だったよね。
mes "HSPBCの管理人は"アルティメット"です。" ← ダブルクォーテーションで囲んだモノ
それなら「HSPBCの管理人はです。」となってもいいのでは、となるんだけど、
HSPでは最後のパラメータ部分だけが表示されるようだよ。
何故そうなるのか詳しくは知らない…。
この「"」問題のほかに「\」が表示されないといった問題や、
1つのmes命令で改行する方法が書いてあるから読んで。
「"」というのや「\」を文字列内に書きたい時や
改行を入れたい時はエスケープしなきゃ表示できないよ。
難しい言葉だけど、別のモノを入れて補わないとダメってこと。
別のモノとは、「\」を表示したいものの前に入れてやればいいんだ。
つまり「"」を表示したい場合は「\"」とすればいいし、
「\」を表示したい時は「\\」と2つならべれば1つの「\」を表示できる。
改行は分かりにくいけど「\n」で複数行書ける。
mes "\"を表示したい時は\\\"と書く\n\\を表示したい時は\\\\と書く\n改行は\\nと書く"
stop
他言語だと他にタブを入れる「\t」があったりするけど、
HSP2では使おうとしても文字化けするだけで使えない。
無理矢理使えるようにしたのがTIPS文字列編に書いてあるよ。
「\n」というのは詳しくは『改行』ではなく『復帰改行』。
改行を表す「\r」でも「\n」と同じように使えるみたい。
ヘルプに「改行=\n」となっているし「\n」と書いた方がいいと思う。
もしかしたら何らかの問題があるのかもしれないからね。
1つのmes命令で改行する方法がもう1つあったよ。
それは中カッコを使うというものだ。
mes {"
こうすることで
見た目の通り
改行させることが出来るんだ。
"}
stop
直感的に分かるだろうけど、「{」から「}」までが1つのブロック。
何度もダブルクォーテーションで囲むと文字になると書いたけど、
シングルクォーテーションで囲むと別のものになるよ。
mes 'A'
stop
「A」と表示されずに「65」と表示されたよね?
Aが65と表示される。これで気づく人がいるんじゃないかな?
気づかない人(ほとんどか)の人に説明すると、
シングルクォーテーションで囲んだものはアスキーコードになるんだな。
指定した文字列のどれでもなるというわけではなく、
1バイト目だけアスキーコードとなるんだ。
1文字目じゃなく1バイト目だよ。
間違えないでね。
2バイト文字だと上位バイトしか出ないのでいつも同じようなコードだ。
1バイト以降をアスキーコードにする時は命令を使う。
それはココで説明しないけど命令名だけ書いておくとpeekだ。
さぁ次の命令を紹介するよ。
…といってもmes命令と同じテキストを表示する命令で、
やり方も何も全部mes命令と一緒なんだ。
違う点はたった1つ。
それは命令名が違うというのだけだよ…。
print命令というもので、書式は「print "strings"」だ。
何で命令名以外がすべて同じ命令が
存在するのか謎だけど気にしないことにしよう。
mes命令は使い方はやったけど書式は書いてなかったな。
書式を見るとmes命令と同じ形なのがすぐ分かるよね?
初めに命令名を書いて、半角スペースをあける。
その後にダブルクォーテーションで囲まれた文字列を記述する。
…といったことを表しているんだよ。
当然、計算する場合はダブルクォーテーションはいらない。
『strings』というは特に意味はないよ。
こんな風に書くんだ、という例として書かれているだけのことだ。
早速使ってみよう。
print "Hello! HSPworld."
stop
何度も書く様にmes,print命令は一緒の命令。
自分の使いやすい方を使えばいいと思うよ。
個人的には文字数の少ないmes命令の方がイイ。
文字数少なくて毎回使うのに楽だって理由だけ。
簡単な紹介だけどコレでいいだろう…。
それじゃあ最後に計算について説明するから。
他言語をしたことのある人は知ってるだろうけど、
加減乗除の全部が全部、
一般に使われる演算子と同じというわけではないよ?
HSPの計算で使う演算子は下の通り。
| 加算 | + |
| 減算 | - |
| 乗算 | * |
| 除算 | / |
| 余算 | \ |
| 左ビットシフト | << |
| 右ビットシフト | << |
| 論理積 | & , && , and , AND |
| 論理和 | | , || , or , OR |
| 排他的論理和 | ^ , xor , XOR |
<,>,=というのもあるけど計算には使わないから省いているよ。
加減算は通常と同じく+,−を半角文字で書く。
mes 2 + 3
mes 4 - 1
stop
乗除算が一般の×,÷を使わない。
*,/を半角文字で書くんだよ。
mes 2 * 5
mes 3 / 2
stop
上の計算をしてもらって気づくと思うけど、
割り算の商(答え)は整数部分しか出てこない。
整数しか計算が出来ないと書いてたけど
ココでも小数部分は切り捨てられちゃうんだ。
乗除算を習うのは確か小学2,3年くらいだったかな?
この計算部分の所まではさすがにココでは説明しないよ。
どこか別のサイトにでも行って勉強してきておくれ…。
余算というのを知らない人が加減乗除より多いかも。
読んで字の如し、割り算の余りを求める演算だ。
上記の赤丸部分が余算で求められる所。
余算は言語によって演算子が違うから気をつけること。
HSPではエスケープシーケンスと同じ「\」を使うんだ。
mes 11 \ 4
stop
一般の計算と同じく割る数が0だとエラーになるんだよ。
2.6以前は強制的に落ちてしまうエラーだったけど、
HSP2.6からエラーが出て正常(?)に終了してくれるようになった。
コレは除算だけじゃなく余算でも起こるんだよ。気をつけてね。
ビットシフトなどの論理(ビット)演算は
ココで説明できるレベルを超えているから説明しないよ。
知りたい人は知識の部屋に行こう。
一般の計算手順って言うのは決められているよね?
| 最優先 | カッコ |
| 乗算・除算 |
| 一番後 | 加算・減算 |
カッコと言っても種類が多いけどココでは省略。
例えば「5+4*3/2-1」のような計算は下の計算手順だね。
| 1. | 4×3 | 12 |
| 2. | 12÷2 | 6 |
| 3. | 5+6 | 11 |
| 4. | 11−1 | 10 |
しかしHSPの通常計算では前から計算するという
電卓と同じようなやり方となるんだ。
| 1. | 5+4 | 9 |
| 2. | 9×3 | 27 |
| 3. | 27÷2 | 13(13.5) |
| 4. | 13−1 | 12(12.5) |
回避するにはHSPでも使えるカッコで矯正するしかないだろう。
mes 5 + 4 * 3 / 2 - 1
mes 5 + ( ( 4 * 3 ) / 2 ) - 1
stop
答えによって処理を変えるプログラムを作るときなんかは
特に注意が必要になってくるね。
はい、一応このページはココまで。
けど、終わりってわけじゃあないぞ。最後に宿題だ。
| Q1 | 「C:\program files\hsp\hsp2.exe」と表示させよ |
| Q2 | 「7÷2」の余りを計算させて表示させよ |
| Q3 | 表示部に「print 3□2」とすると、ウィンドウには「12」と表示された |
| 四角に当てはまる演算子を答えよ |
答えは次のページで。