BASIC! + SQLを使ってみる

Android向けの簡単なプログラム言語を探していて、BASIC!+SQLというものを見つけました。てっきりTiny BASICかと思って見てみると、けっこう本格的な構造化BASICだということがわかりました。また、SQLデータベースの機能や、通信・bluetooth・グラフィックス・音楽・GPSなどAndroidのハードウェアを活かせる機能も豊富に搭載しています。プログラムが完成すれば最終的にはコンパイルしてスタンドアロンのAndroidアプリケーションを作成することもできるようです(PCが必要です)。今日は、このBASIC!+SQLの簡単な言語仕様について、従来のマイクロソフト系のBASICや、Visual Basic(VBと略します)との対比を中心に書きたいと思います。(ZiiOおよびSH-03Cで動作を確認しました)
BASIC!+SQL
グラフィックサンプル

1. データ型と変数
データ型は数値型と文字列型の2種類となります。従来のBASICと同様、変数名に"$"を付けると文字列型になります。なお、ユーザー定義関数(後述します)内の変数はローカル変数となりますが、それも含めすべて(配列以外は)宣言は不要です。また、予約語から始まる変数名は原則的には使用できません。
小数を定数として記述する場合は必ず"0"をつけて"0.15"のようにしてください。".15"ではエラーとなります。また、Print文(後述します)で数値を表示すると通常は小数点下1ケタ表示("**.0")となります。表示形式を変更したいときは Format$関数(後述します)を使用します。
文字列定数は""で囲みますが、中に"を含めたいときは \" と記述します。
配列は Dim文で宣言しますが、表記は A(10) でなく A[10] のように、[ ] で囲みます。Option Base文は使用できず、配列の添え字は常に1から始まります。多次元配列も可能ですが配列ひとつ当たりの要素数を10000以下にする必要があります。配列に対しては統計処理、ソートなどのデータ処理を行えるステートメントがあります(また後日書きます)。配列を削除するには、Erase文の代わりに UnDim文を使用します。
Bundle, List, Stack などのデータ構造と、それにアクセスするポインタの概念があります(また後日書きます)。

2. コメント
! で始まる行はその行が1行コメントとなります。
!! で始まる行ではさまれた範囲は、すべてコメントとなります。
行中の % があると、それ以降はコメントとなります。

3. 論理演算子
if文などの条件として使用する場合は、Not の代わりに !、And の代わりに &, Orの代わりに | をそれぞれ使用します。
数値同士を論理演算する場合は、Bor関数、Band関数、Bxor関数を使用します。いずれも2つの引数を論理演算し、結果を返します。

4. 文字列操作関数
通常のBASICの ASC関数に相当するのが Ascii関数、Instr関数に相当するのがIs_In関数となります。
Is_In関数の書式:Is_In(探す文字列, 対象文字列[, 開始位置])

5. ユーザー関数定義
ユーザー関数は下記のように記述します。
Fn.def 関数名(変数1,変数2…)
  …
 (処理)
  …
Fn.rtn 戻り値
Fn.end
基本的に引数は値による呼び出し(VBでいうところの byval)になりますが、呼び出し時に引数の前に&を付けると参照呼出し(VBでいうところの byref)になります。ただし、引数として配列全体渡すときは常に参照呼出し(byref)になります。参照呼出しの場合、関数内で値を変更すると元の変数の値も変わります。例えば、test(&A,B)という形で関数を呼び出すと、第1引数として指定された変数の値が関数内で変更された場合、Aの内容がその値に変更されます。
関数の戻り値が不要の場合は Call文を使います。Call 関数名(引数…) とします。
BASIC!には通常のサブルーチンもありますが、引数やローカル変数が利用できることを考えると、関数を用いたほうがよいと思います。

6. If文
VBとほぼ同じです。If ~ Then ~ Elseif ~ Endif が使用できます。注意点として、従来のBASICと同様な記述方法で Then の直後に代入文を置く場合、必ず Let文を入れる必要があるとのことです。GoTo文の引数に数式を与えることができるようになっているのでしょうか。(余談ですが、SHARPのポケコンPC-1500も、GOTO文の引数に変数や式が使用できました。このため、THENの直後に代入文を置く場合は LET文を使用しなければなりませんでした。そうしないと、"A=10"などという記述が、Aの値が10かどうか、という論理式として評価されてしまい、その値にジャンプしようとしてエラーになってしまいます。)

7. For~Next文
従来型BASICやVBとほぼ同じく、For ~ To ~ Step ~ Next の形式で使用できますが、ループを抜けるとき F_n.break文を使う必要があります。

8. その他のループ
While ~ Repeat はBASIC, VBの While~Wend と同じですが、ループを抜けるとき W_r.break文を使います。
Do ~ Until はVBの Do ~ Loop Until と同じですが、ループを抜けるとき D_u.break文を使います。

9. ジャンプ・サブルーチン
ジャンプ先としてはラベルを使います。ラベルの形式はVBと同じで、行頭から始まり":"で終わる文字列です。ジャンプ先として指定する場合は":"の手前までを""で囲まずに指定します。
GoSub文はBASICと同じです。ラベル:~Return までを実行し、呼び出し元に(GoSub文の次に)戻ります。
GoTo文もBASIC, VBと同じで、単に ラベル: へジャンプします。
OnError: というラベルは、エラーの時にジャンプします。On Error Goto などの宣言は不要です。
OnBackKey: というラベルは、「戻る」ボタンを押すとジャンプします。

10. Switch文
VBのselect ~ case ~ end select に似ています。以下に対比を示します。
select case 式 → Sw.begin 式
case 式 → Sw.case 式 ~ Sw.break (Cなどと同じで、break しないと次の case を実行してしまいます。)
case else → Sw.default
end select → Sw.end

11. EndとExit
End文で実行終了しますが、Exit文ははBASIC!のシステムからも抜けてホーム画面に戻ります。

12. 画面・キー入出力
画面に数値や文字を表示するには Print文を使用します。書式はBASICとほぼ同じですが、出力フォーマットを指定するには Using の代わりに format$関数を使用します。
テキストを入力するには Input文を使用します。これもBASICとほぼ同じで、Input "プロンプト", 変数, デフォルト値 という書式で使用します。変数は一つのみしか指定できません。ダイアログが開いて入力可能な状態になりますが、「戻る」ボタンでキャンセルするとエラーが発生します。その場合、OnError: ラベルが存在しないとプログラムの実行は停止します。
Text.input 文は Input文に似ていますが、大きなウィンドウが開き長いテキストの編集に向いています。Text.input 変数, デフォルト値 の書式で使用します。プロンプトは表示できません。
Tget文はターミナル風の入力画面を開きます。Print文などで出力されたコンソール画面が開き、その画面で入力を行います。Tget 変数、プロンプト の書式で使用します。
Kb.show でソフトウェアキーボードを表示、Kb.hide でソフトウェアキーボードを非表示にできます。
Inkey$文はBASICの INKEY$関数と同様、キーコードを取得します。書式は Inkey$ 数値変数 とします。

プログラムをロードするにはメニューの"Load", 実行するには"Run", 保存するには"Save", クリアするには"Clear"をそれぞれ選択します。豊富なサンプルプログラムも含まれていますので、いろいろ遊んでみてはいかがでしょうか。今日の内容で、BASICやVBでプログラミングの経験のある方はだいたい感じがつかめたと思いますが、詳しくは添付のリファレンス De_Re_BASIC_.pdf をご覧ください。また機会があれば分野別に機能の解説もしていきたいと考えています。
関連記事
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

tag : Creative Android ZiiO タブレット SH-03C SHARP BASIC

コメント

非公開コメント

アクセスカウンタ
カレンダー
11 | 2021/12 | 01
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
最新記事
最新コメント
リンク
カテゴリ
楽天お勧め商品
検索フォーム
Kyoroのつぶやき
FC2掲示板
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示