Microsoft Small Basicは学習を目的としてマイクロソフトが提供しているBASICの処理系。シンプルな言語仕様、習得が容易、簡潔な記述がその特徴といえる。
Microsoft Small Basic(以下、Small Basic)は学習を目的としてマイクロソフトが提供しているBASICの処理系。習得が容易で、簡潔な記述がその特徴といえる。
Small Basicは次の3つの要素で構成される、いわば小規模なプログラミング言語およびその処理系といえる。
言語としてのSmall Basicは(もちろん)BASICの方言であり、独自の進化を遂げているVisual Basicと比べて非常にシンプルなものとなっている。その特徴を幾つか以下に挙げてみよう。
こうした特徴から、プログラミング初心者がプログラミングの基礎概念を学ぶのが比較的容易になっている。その一方で、次のような特徴もある。
Small Basicそのものは.NET Frameworkをベースとしており、Small Basic用のライブラリが提供する各種のオブジェクトを使用して、意外と高度な処理を(場合によっては、Visual Basicのコードよりも簡潔に)行えるようになっているとのことだ。
以下にSmall Basicでプログラミングを行っているところを示す。
前述したようにプログラミング環境となるウィンドウ内でコードを記述し、ツールバーにある[実行]ボタンをクリックして、これを実行するというのがSmall Basicにおけるコーディングの基本となる(Small Basicで作成したプログラムをVisual Basicに移行するためのツールも用意されている)。また、上の画像右側にはライブラリが提供するControlsオブジェクトの紹介が表示されている。プログラミング環境内では以下の画像に示すように、IntelliSenseによる支援もある。
なお、上の画像にあるコードはGUIウィンドウにボタンを2つ表示して、クリックされたボタンに応じてメッセージボックスを表示するというものだ。
GraphicsWindow.BackgroundColor = "Azure"
GraphicsWindow.Width = 300
GraphicsWindow.Height = 200
btn1 = Controls.AddButton("button 1", 65, 150)
btn2 = Controls.AddButton("button 2", 165, 150)
Controls.ButtonClicked = btn_clicked
GraphicsWindow.Show()
Sub btn_clicked
btn = Controls.GetButtonCaption(Controls.LastClickedButton)
GraphicsWindow.ShowMessage(btn + " clicked", btn)
EndSub
GraphicsWindowというのがGUIベースのウィンドウを抽象化したオブジェクトだ。BackgroundColor/Width/HeightはGraphicsWindowが持つプロパティで、ウィンドウの背景色/幅/高さを指定する。ウィンドウを表示するにはShowメソッドを使用する(ただし、このプログラムでは実際にはShowメソッド呼び出しは必要ない。むしろ、ウィンドウの表示/非表示をShow/Hideメソッドで切り替えると考えた方がよいだろう)。
Controlsオブジェクトは、GraphicsWindowに表示するコントロールを管理するオブジェクト。ここでは、そのAddButtonメソッドを使用して2つのボタンをウィンドウに追加(表示)している。また、Controls.ButtonClickedはContrlsオブジェクトが持つイベントであり、ここではボタンがクリックされたタイミングで実行する処理をその下にあるbtn_clickedというサブルーティンとしている。
最後にあるbtn_clickedサブルーティンを見ると分かるが、ControlsオブジェクトにはButtonClickedイベントハンドラーを1つしか指定できない。そのため、クリックされたボタンに応じた処理を行うには、Controls.LastClickedButtonプロパティを使用して、どのボタンがクリックされたかを判断する必要がある。ここでは、クリックされたボタンを判断した上で、そのキャプションをControls.GetButtonCaptionメソッドで取得しているだけだが、実際にはIf文での処理の分岐などを行うことになるだろう。
実行結果を以下に示す。
ここでは[button 1]ボタンをクリックしたので、メッセージボックスに「button 1 clicked」というメッセージが表示されている(タイトルも「button 1」となっている)。また、プログラム実行時にはプログラミング環境ウィンドウには、その旨を示すメッセージがオーバーレイ表示され、操作ができなくなる。
クリックされたボタンの判断と、それに応じた処理の切り分けなどについては煩雑な処理が必要になるが、「ライブラリが提供する機能=オブジェクト」と「そのオブジェクトが持つプロパティ/イベント/メソッド」をドットで区切り、必要に応じて操作対象を加えていくというSmall Basic独特の流儀に慣れれば、ある程度は直感的にコードを記述できるようになるかもしれない。なお、GraphicsWindowに図形などを作成したり、それらを移動させたりといった用途に使えるShapeオブジェクトもある。このオブジェクトを使うと、GUIウィンドウ上で簡易的なアニメーション処理を比較的容易に実現できる(実際のコード例については「特集:Small Basic開発入門」を参照されたい)。
もう1つ例を示す。先ほどはGUIウィンドウを抽象化したGraphicsWindowとそれに関連するオブジェクトを見たので、今度はコマンドプロンプトを抽象化したTextWindowを利用するプログラムを見てみよう。
person[0]["name"] = "insider.net"
person[0]["phone"] = "1234-5678"
person[0]["age"] = 40
person[1]["name"] = "build insider"
person[1]["phone"] = "2345-6789"
person[1]["age"] = 24
person[1]["extra"] = "extra info"
For i = 0 To Array.GetItemCount(person)
info = Array.GetAllIndices(person[i])
For j = 1 To Array.GetItemCount(info)
TextWindow.WriteLine(info[j] + ": " + person[i][info[j]])
EndFor
EndFor
ここでは2次元配列を作成し、その要素を(本フォーラムの読者であればおなじみの)WriteLineメソッドを使用してTextWindowオブジェクト(コマンドプロンプト)に出力している。
2次元配列を作成しているところを見ると、インデックスには数値だけではなく、文字列も使えることが分かる。文字列をインデックスとした場合にForループを行う際には、文字列インデックスを要素とする配列をArray.GetAllIndicesメソッドで作成するとよい。上のコードの内側のForループではそのようにしている(このとき、返される配列が1ベースになっているので注意が必要だ。Small Basicの配列自体は0ベースとなっているが、このようにインデックス0が使われないことがある)。インデックスを要素とする配列infoを利用して2次元配列の要素を「person[i][info[j]]」のように指定している点に注意。
実行結果は次のようになる。
最後にGoto文を利用したループとそこからの脱出についても見ておこう。
number = Math.GetRandomNumber(100)
loop: 'While ("true")
TextWindow.Write("input your guess: ")
guessed = TextWindow.ReadNumber()
If number = guessed Then
Goto finished
ElseIf number > guessed then
TextWindow.WriteLine("My number is bigger")
Else
TextWindow.WriteLine("My number is smaller")
EndIf
Goto loop ' EndWhile
finished:
TextWindow.WriteLine("you win!")
詳細は割愛するが、ここでは2つのラベルloopとfinishedを使用して、If文での数値比較で入力された数値とシークレットナンバーの値が異なればループを続け、一致したらゲームを終了するようにしている。なお、コメントアウトして書いているように「While ("true")」と「EndWhile」で無限ループを作成してもよい。Goto文の利用については議論が大いにあるところであろうが、Small Basicでは必須の構文要素となっている。なお、実行結果については割愛する(等値比較を「=」で行っている点にも注意が必要だ)。
Small Basicはシンプルな言語仕様でありながら、それなりに強力なライブラリを持っている。例えば、文字列処理に関連する処理を集めたTextオブジェクトや、数学計算を行うためのMathオブジェクト、ファイルを扱うためのFileオブジェクトなど、ネットワークファイルやWebコンテンツをダウンロードするためのNetworkオブジェクトがある。これらのオブジェクトを使用することで、意外に役立つプログラムを作成できるかもしれない。なお、どういったオブジェクトを利用できるかについては「Reference Documentation」ページを参照されたい。
Microsoft Small Basicは学習を目的としてマイクロソフトが提供しているBASICの処理系。シンプルな言語仕様、習得が容易、簡潔な記述がその特徴といえる。その一方で、Small Basicが提供するライブラリを利用することにより、実際に役立つプログラムも作成できるだろう。プログラミングの楽しみを学ぶという意味ではシンプルで面白い存在かもしれない。
Copyright© Digital Advantage Corp. All Rights Reserved.