Small Visual Basic の紹介

# はじめに
これは、[Visual Basic Advent Calendar 2024](https://qiita.com/advent-calendar/2024/vb)の11日目の記事となります。

[Visual BasicのDiscord](https://discord.com/invite/Y8EH5fF6WG) でよく見かけるのが、 Mohammad Hamdy(SVB) 氏です。
Visual Small Basic を主に開発しています。

# Visual Small Basic とは
Visual Small Basic の前に、Small Basic を説明します。

## Small Basic
マイクロソフトが 8 歳以上の子供や初心者が簡単に学べるように開発したプログラミング言語の開発・実行環境です。
言語仕様がシンプルで予約語は14個しかありません。昔ながらのBASICとは違い、オブジェクトの名前にピリオドをつけてメソッドを呼ぶというVBらしさは引き継いでいます。
標準ライブラリには文字列処理や入出力に加えグラフィック命令もあります。これには懐かしいタートルグラフィックスクラスも含まれています。

https://atmarkit.itmedia.co.jp/fdotnet/chushin/smallbasic_01/smallbasic_01_01.html

https://forest.watch.impress.co.jp/docs/news/1540655.html

### タートルグラフィックス
1967年に教育向けとして設計されたプログラミング言語 LOGO で実装された コンピュータ・グラフィックスの機能です。ユーザーが記述したプログラムに応じて、亀（タートル）の形をしたカーソルを操作して、自由にコンピュータ・グラフィックスを作成できます。

### オンライン実行サイト
Small Basic Online

https://smallbasic-publicwebsite-code.azurewebsites.net/

## Visual Small Basic
Small Basic にビジュアル フォーム デザイナーを追加したものになります。
Visual Small Basic コンパイラは Small Basic コンパイラの改良版で、関数、パラメータ、ローカル変数の定義、配列初期化子の使用、長いコード行を複数のサブ行に分割するなどの新しい構文機能を備えています。またキーワードには、14 個の Small Basic キーワードと、Mod 演算子や & 演算子などの 16 個の新しいキーワードが含まれています。

Hamdy 氏が3年間に渡って開発しており、現在 3.xx がリリースされています。

https://github.com/VBAndCs/sVB-Small-Visual-Basic

Hamdy 氏は、実際に子供たちに教えてつつ、「Small Visual Basic Kid Programmer」という本(Leve1〜3の3冊)を書いています。

### Small Visual Basic が Python と競合できる理由
sVB:Small Visual Basic、SB:Small Basic

Hamdy 氏いわく

Small Visual Basic を、子供たちにプログラミングを紹介するのに最適なツールとして進化させました。
* sVB は Small Basic の構文のシンプルさとタートルおよびグラフィックス ウィンドウを備えていますが、SB の問題も修正しています。SB には変数ドメイン、関数、サブルーチン パラメーター、オブジェクトがありません。sVB にはそのすべてが備わっています。sVB では、SB タートルおよびグラフィックス ウィンドウにもさらなる改良が加えられています。
* sVB は VB .NETと同様に最新であり、配列初期化子などの構文機能の一部を使用し、XAML 機能も一部利用しています。しかし、シンプルなフォーム デザイナーとイベント処理メカニズムを使用するため、従来の Visual Basic と同様に簡単です。

さて、疑問は、なぜ今最も人気があるPython ではなく sVB を選択する人がいるのかということです。Small Visual Basic と Python を簡単に比較してみましょう。
* Python はフルスタック言語ですが、sVB はデスクトップ アプリ専用で、教育目的にのみ使用できます。しかし、これはsVB に将来性がないという意味ではありません。sVB は、実際には、人気のある強力な開発プラットフォームである DotNET と Vs .NETへの入り口なのです。
* Python と sVB はどちらも動的型付け言語ですが、型変換を必要としないため、この点では sVB の方が簡単です。
* Python は大文字と小文字を区別し、驚くべきことにTrue と False のキーワードは大文字で始まりますが、sVB は大文字と小文字を区別せず、コード エディターは単語を元の大文字と小文字に修正します。これにより、学習が簡単になります。
* Python リストは 0 からインデックス付けされますが、sVB 配列はデフォルトで 1 からインデックス付けされます。これはより自然で子供にも扱いやすいものですが、0 インデックスや負のインデックスを使用することを妨げるものは何もありません。sVB の配列は実際には辞書であり、インデックスは実際にはキーだからです。
* Python では三角関数はラジアン角度を使用します。これは sVB のデフォルトですが、この動作を無効にしてデフォルトで度を使用することもできます。
数学.UseRadianAngles = False
* Python の for ループは、範囲の排他的な終了のために混乱を招く可能性があります。
```py
for i in range(5, 0, -1):
    print(i)
```

while for ループは sVB では非常にシンプルです。
```vb
For I = 5 To 1 Step -1
   TW.WriteLine(I)
Next
```

* Python のブロック インデントは子供にはわかりにくいですが、sVB には終了ブロックがあり、コードが適切に構成され、読みやすくなります。sVB エディターは、子供が入力しているときに終了ブロック ステートメントを自動的に追加します。また、ブロック インデント、きれいなリストのスペース、識別子の大文字と小文字を調整します。変数の大文字と小文字のルールも強制します。ローカル変数とパラメーターは小文字で始まり、グローバル変数、サブルーチン、関数は大文字で始まります。そのため、sVB では、子供はフォーマットではなく、コード ロジックだけに集中できます。
* 一般的に、sVB IDE はフォームやグラフィックを扱うのがより簡単で強力です。


# インストール
[VS marketplace](https://marketplace.visualstudio.com/items?itemName=ModernVBNET.sVBInstaller) から Setup がダウンロードできます。

# Hello World
コントロールを貼り付けした際に、斜めに変更することもできます。

## Form Design タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/d8ce8c08-e2f2-144c-9a4e-43aa60ca9d98.png)

## Form　Codeタブ
```vb
Sub Button1_OnClick()
   TextBox1.Text = "ハロー sVB!"
EndSub
```

## 実行
ボタンをクリックすると、テキストボックスに"ハロー sVB!"がセットされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/df5492d0-c1b0-9bf5-7942-c3c0f4d3f6f9.png)

## サンプル
Sampleのゲームの中には、テトリスなどもあります。

https://github.com/VBAndCs/sVB-Small-Visual-Basic/tree/master/Samples

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/eaa3e4ec-d7e4-8a4b-ac42-aba444215eda.png)


# 最後に
せっかくなので下記サイトの Small Basic を参考に移植してみたいですね。

http://www.nonkit.com/smallbasic.html

https://www.greenowl5.com/gprogram/smallbasic/smallbasic030.html