Nintendo SWITCH と「プチコン4 SmileBASIC」をついに購入しました!
プチコンmkIIやプチコン3号 と比べて大きいのは、やはり個人的にはキーボードが繋げるようになったことですね。これで長いコードも怖くない!
というわけで、SmileBASIC の復習を兼ねて、大規模なプログラムを作成するコツを整理してみます。
マルチプログラム
プチコン3号の頃から、マルチプログラム という概念がありました。
スロット0~スロット3の4スロットに、別個のプログラムを記憶・実行可能。
というものです。プチコン4にもこの機能は継承されており、ソフトキーボードを表示中に、トリガーを引くと切り替わるメニューの中に、スロットを操作するボタンが用意されています。
ちなみにキーボードだと Ctrl+1~4 キーで切り替わるみたい。
通常のテキストエディタで例えると、4つのソースファイルを同時に開き、タブで切り替えながら編集できる感じでしょうか。大規模なプログラムをパーツ分けして開発するのに、適した機能です。
ちょっとマニアックな機能?
通常の状態では、プチコンは スロット0
を対象に動作しています。例えばプログラムを実行する際に RUN
命令を使用しますが、この命令の正式な記述方法は
RUN [プログラムスロット]
であり、どのスロットにあるプログラムを実行するか指定するようになっています。ただしこのプログラムスロットの初期値が 0 となっているので、指定しないと スロット0
にあるプログラムを対象に実行します。
スロット1~スロット3 は知らなくても問題ない、中級者以上のために用意された機能なのです。
マルチプログラム間の連携
さて、マルチプログラム間の連携について簡単にまとめてみます。
まず、各スロットは独立しています。基本的には他スロットの環境、変数や関数にはアクセスできません。変数名の衝突なども気にする必要は無い、という状況です。
そしてマルチプログラム間の連携のために用意されたキーワードが COMMON
で、これを付けて定義された関数は他のスロットから認識され、呼び出すことができます。例えば以下のような簡単なサンプルプログラムが、SLOTTEST というファイル名で保存されているとします。
COMMON DEF SUB_ADD(A,B)
RETURN A + B
END
この関数は以下のようにして利用できます。
LOAD "SLOTTEST",1 'プログラムをスロット1に読み込む
EXEC 1 'スロット1を実行し定義を有効にする
PRINT SUB_ADD(2,3) '定義された関数を利用する
ただこの COMMON
キーワードは関数定義だけのようです。例えばサブルーチンの場合は、以下のようにキーワード付けずに普通に定義しておいて、
END
@SUB_1
PRINT "ABC"
RETRUN
利用する側は以下のように @SUB_1
ラベルを引用符 "
で囲ったうえで、スロット番号を示す 1:
を付与したカタチで呼び出します。
LOAD "SLOTTEST",1 'プログラムをスロット1に読み込む
EXEC 1 'スロット1を実行し定義を有効にする
GOSUB "1:@SUB_1" '定義されたサブルーチンを呼び出す
※ 上記の1行目と2行目は EXEC "SLOTTEST" 1 と1行にまとめることもできます
どう活用するか
個人的には、過去の経験から、大規模なプログラムを作成する際、スロットを以下のような感じで利用したいと考えています。
スロット0: メインロジックとデータモデル
(例: 戦士の基本パラメータ、など)
スロット1: 目的ごとの処理ロジックを記述した上位ライブラリ
(例: 戦闘ロジック、ダメージ計算処理など)
スロット2: 対象の種別に特化した下位ライブラリ
(例: コマンド選択ウィンドウの表示ルーチン、など)
スロット3: 汎用のコアライブラリ
(例: データ変換関数、など)
まあ、実際に実機で作ってみないとわかりませんが。
下位・コアライブラリは今後も使いまわしたいので、上位のプログラムを解析して、使われた関数だけをまとめて書き出すような、簡易的なパッケージツールなども作成できると、より楽ができそうです。
というわけで
プチコン4 を使い始めるにあたり、これまで活用していなかったマルチプログラム/スロットの機能をざっとまとめてみました。
今後は機能の汎用化、ライブラリ化を並行して進めつつ、プチコン4のプログラムを書いていきたいとおもいます。いくつか書いてもう少し経験を積んだら、ここに追記しますね。
それではまた!