OriosのActiveBasic講座(1-2):条件・分岐・繰り返し

5.SelectCaseブロック

【目標】「SelectCase」を使い、変数の値に応じた作業をできるようになりましょう。

前回で長い間やってきた「ループ」は終わりました。 では今回は何をするかというと、「SelectCase」というブロックをやります。 これは指定された変数の値の場合分けを行うブロックです。 これを使えば今まで「If a=1 Then …… ElseIf a=2 Then ……」とやっていたものが、簡単にできるようになります。 では早速はじめましょう。以下のプログラムを実行してみてください。

'lesson1-2-5
#console
Dim num As Long
Input "占います。1,2,3のどれかを入力してください。",num
Locate 0,2
SelectCase num
Case 1
Print "あなたはどんな困難にも突き進めるでしょう。"
Case 2
Print "あなたは周りの人と仲良くできるでしょう。"
Case 3
Print "あなたは周りの人の支えになるでしょう。"
Case Else
Print "あなたは非常に個性的ですね……。"
EndSelect
Sleep(3000)
End

C:\ActiveBasicCourse\lesson1-2-5...
占います。1,2,3のどれかを入力してください。
(例)1を入力した場合

あなたはどんな困難にも突き進めるでしょう。
(例)5を入力した場合

あなたは非常に個性的ですね……。

どうでしたか? 私の場合「SelectCase=占い」という関係式があるためこんなプログラムにしてみました。 あっ、念のため言っておきますがこの占いは全くのデタラメです。 本気にしないでください。 では説明に入りましょう。

-*-*-*-*-説明-*-*-*-*-
【使い方】
SelectCase 変数  Case   command  …… EndSelect
【備考】
(1)「Case   command 」のかたまりは、 必要な分だけ何回も繰り返すことができます。(冒頭のソースのような感じで)
(2)変数 の後、 の後、command の後には改行を入れないといけません。
(3)SelectCaseの間、 EndSelectの間にはそれぞれスペースを入れても構いません。
【意味】
変数 が のときcommand を実行します。
【解説】
(1)このブロックは変数の場合分けに使用します。 例えば「変数a」が「1」のときはこう、「2」のときはああ、「3」のときはそう……という感じにです。 まず場合分けの対象になる変数を変数 のところに書きます。 (例:「変数a」を場合分けしたいときは「SelectCase a」) 次に変数 を場合分けする値を のところに書きます。 複数ある場合は「Case   command 」を複数書きます。 (例:1,2,3で場合分けするときは「Case 1 …… Case 2 …… Case 3 ……」) そして最後にEndSelectを書きます。

(2)必ずEndSelectは絶対に書き忘れないでください。 これを書かないとcommand と普通の部分との区別がつかなくなり、エラーが出ます。

(3) には普通の値(数字<「1」「-34」など>や文字列<「"a"」「"str"」など>)だけでなく、変数など、値を持つものならなんでも使えます。 また変数 には、一応普通の値も使うことができます。(まず使うことはないと思いますが……。)

(4)1つのSelectCaseブロックの中に同じ の「Case   command 」のブロックは使うことができません。 使ったとしても前の方のブロックを実行するとブロックを抜けてしまうため後ろのブロックは実行できません。注意してください。


【使い方】
Case Else command 
【備考】
(1)Elsecommand の間には改行を入れます。
(2)SelectCaseブロックの最後に1回しか使えません。
【意味】
SelectCaseブロックで変数 がどの にも当てはまらないときにcommand を実行します。
【解説】
(1)SelectCaseブロックの中では変数 が のとき、 その が書かれているところのcommand を実行するのは前の項目で学習しましたね。 では変数 がどの にも当てはまらないときに何かさせたいときはありませんか? 例えば今回のプログラムでは指示に従わなかった人へ特定のメッセージを表示させるような場合です。 そのような場合いちいち「Case 0 …… Case 4 …… Case 5 …… 」と書くなんてできません。 ほぼ無限にあるので不可能です。 (まあAB3.05の場合Inputが整数しか扱えない&Long型は-2147483648〜2147483647しか扱えないので232個書けばできることはできますが……。) ではどうするか?それを解決するのが「Else」です。  のところに「Else」を書いておくだけで、 変数 がどれにも当てはまらないものを処理してくれます。

(2)この「Case Else command 」は必ずブロックの最後(EndSelectの直前)においてください。 もしこれを他の「Case   command」のブロックの前におくと、 「Case Else」のブロックの後の「Case   command 」は参照すらされません。 なのでこれは必ず最後に置いてください。 またこれは普通の「Case   command」のブロックのときと同じように、2回以上使うことはできません。


【使い方】
Locate x ,y 
【意味】
左上からカーソルを横からx 文字目、上からy 文字目に移します。
【解説】
(1)まずカーソルとは何か?それはずばりInputのときやSleepのときに点滅しているです。 ではなぜこんなテンメツシカク(点滅四角)くんを動かさないといけないのか? それはカーソルが全ての入出力の場所になっているからです。 Printの表示もカーソルのあるところから文字を表示します。 またInput入力もカーソルのあるところから文字を入力しますね。 つまりカーソルを動かすことで好きなところに文字を表示したり、好きなところで文字を入力させることもできるわけです。

(2)Locateを使って場所を動かすには左上を基準とした絶対座標(カーソルがどこにあろうとも指す場所は変わらない座標系)で指定しなくてはいけません。 具体的には左上を「0,0」として右に1文字いくごとに左側の数字を、下に1文字いくごとに右側の数字を、それぞれ1ずつ増やします。 ちなみに単位の「文字」というのは半角・全角関係ありません。 (何も出力されていない部分では全角が単位です。)



【補足トリビア(?)】
(1)command ……これが何を表すかの再確認です。 ループのときに何回も使った表現ですが、これはcommand の両隣に書いてあるものにはさまれているもの全てです。 例えば「Case   command  EndSelect」と書いていた場合、 command はからEndSelectの間にある全てのソースを表します。 「ElseIf 条件式  command  Else」と書いていた場合は、 command は条件式からElseの間にある全てのソースを表します。

(2)リテラル値……プログラムの中で変わらない値のことを言います。 例えば「変数」はプログラムの中で値を変えることが可能です。 しかし、「a=1」や「a="abc"」と書かれていた場合、「1」や「"abc"」自体をプログラムを実行することで変えることは不可能ですね。 (「a」の値じゃなくて「1」や「"abc"」という表記をです。) このようにプログラム内で値を絶対変えることができない値をリテラル値と言います。 これはヘルプファイルなどに書いてある表現なので覚えておくと役に立ちます。


【座標系モデル】

Locateで使われている座標系のモデルを下に書いてみます。参考にしてください。

(単位:文字)012345678910
00,01,02,03,04,05,06,07,08,09,010,0
10,11,12,13,14,15,16,17,18,19,110,1
20,21,22,23,24,25,26,27,28,29,210,2
30,31,32,33,34,35,36,37,38,39,310,3
40,41,42,43,44,45,46,47,48,49,410,4
50,51,52,53,54,55,56,57,58,59,510,5
60,61,62,63,64,65,66,67,68,69,610,6
70,71,72,73,74,75,76,77,78,79,710,7
80,81,82,83,84,85,86,87,88,89,810,8
90,91,92,93,94,95,96,97,98,99,910,9
100,101,102,103,104,105,106,107,108,109,1010,10

これで長いことやってきた「条件・分岐・繰り返し」もこれで終わりですが、 最後の項目のSelectCaseはどうでしたか? このブロックはウィンドウを扱うときにすごく役立つ(というか常に使う)ので、必ずマスターしてくださいね。 理解できないところがあれば掲示板で質問するのも手です(というか単なる宣伝)。 この後は番外編をはさんで「プロシジャー」に入ります。 ここでいわゆる「関数」などが出てきます。 これが使えるとプログラミングが円滑に行えます。 では長かったこの章の最後を飾る「やってみよう」です。

-*-*-*-*- -*-*-*-*-

「1+1」という問題を出し、「2」と答えたら「正解」、「1」もしくは「3」と答えた場合は「おしい」、 その他を答えた場合は「残念」と表示するプログラムを作ってみよう。 ただし結果は入力された場所から2行下(=1行間を空けて)表示するようにしてください。




ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

前に戻る - 次に進む

ホーム > OriosのActiveBasic講座(トップページ) >