Visual Basicに関する世界観です。
.NETも参照のこと。
Visulal BasicはVBと略され、ポトペタ(RADとも呼ばれる)の環境でGUIアプリケーションを開発することができる。
VBでは、フォームを表示するために、Windowsコントロールの位置やサイズを計算する必要はない。GUIのフォームデザイナーから、ダイレクトにフォーム上にコントロールを配置(ポトペタ)することができる。
また、単にデザインができるだけではなく、ダブルクリックをしたり、特定のイベントに応じたメソッドを定義・登録していくことで、簡単にGUIアプリケーションをホイホイと作っていくことが可能。
とても簡単にプログラミングができるだけでなく、.NET Frameworkのクラスライブラリを使うことで、どんな状況にも対応できる「賢いGUIアプリケーション」をさくさく作ることができる。
イベント駆動も参照のこと。
以下のVBの文法についての記述はVisualBasic2010パーフェクトマスター (Perfect Master SERIES)を参考に執筆・引用しました。
変数は以下のように宣言する。
Dim 変数名 As 型名
たとえば、
Dim x As Integer x = 100
定数はDimの代わりにConstを使う。
型はByte, Short, Integer, Long, Single, Double, Decimal, Boolean, Date, Char, Stringなどがある。
配列は()で宣言する。
Dim array(9) As Integer array(0) = 75
配列のインデックスは0から始まる。配列の要素数を指定する際にも、(9)で10個分になる(0~9になる)ということに注意しよう。
2次元配列は以下のようになる。
Dim array(9,9) As Integer array(0,3) = 50
構造体は以下のようになる。
Structure 構造体名 Dim 変数名1 As 型名 Dim 変数名2 As 型名 End Structure
利用する場合は、
Dim 構造体変数名 As 構造体名 構造体変数名.メンバ変数名 = 値
のようになる。
たとえば、
Structure Hoge Dim x As Integer Dim y As Integer End Structure
とした上で、
Dim hoge1 As Hoge hoge1.x = 100 hoge1.y = 50
構造体は参照型ではなく値型であることに注意が必要。
制御構造は、
・If ... Then ... Else
・Select Case
・For ... Next
・Do While ... Loop
などが使える。
条件分岐:
Dim v As Integer v = Integer.Parse(Console.ReadLine()) If v > 0 Then Console.WriteLine("{0}は正の数です。", v) ElseIf v < 0 Then Console.WriteLine("{0}は負の数です。", v) ElseIf v = 0 Then Console.WriteLine("{0}は0です。", v) End If
これ以外にも、GUIフォームを使うのであれば、チェックボックスのチェック状態を知るために、HogeCheckBox.Checked = Trueを比較するなどの方法がある。等しいかどうかを比較するために==ではなく=を用いる点に注意しよう。
ループ:
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer For i = 1 To 40 Step 1 MessageBox.Show(Str(i) & "回目のメッセージ地獄です。全部で40回表示されます。", "メッセージ地獄40回") Next i End Sub
Subプロシージャは値を返すことができない。簡単な処理をサブルーチン化するのに利用する。
Sub Calc(ByVal x As Integer, ByVal y As Integer) Console.WriteLine("{0} + {1} = {2}", x, y, (x + y)) Console.WriteLine("{0} - {1} = {2}", x, y, (x - y)) Console.WriteLine("{0} * {1} = {2}", x, y, (x / y)) Console.WriteLine("{0} / {1} = {2}", x, y, (x * y)) End Sub
Functionプロシージャは値を返す。主に計算処理で利用する。
Function Ave2(ByVal x As Integer, ByVal y As Integer) As Integer Dim result As Integer result = (x + y) / 2 Return result End Function
関数の引数にByValではなくByRefを使用することで、C言語のポインタのように関数の内部から関数呼び出し側にあるデータを操作する関数を作ることができる。
後日注記:VBでは、行の中の'に続く文字列はコメントとして扱われ、行末まで無視される。
構造化プログラミングや関数も参照のこと。
2023.02.03編集
また、.NET化されたVB.NETではオブジェクト指向のクラスを用いたプログラミングができる。
クラスはClass文で定義し、コンストラクタ名はNewとなる。
インスタンスは
Dim 変数名 As New クラス名()
として作成し、メンバには「.」を用いてアクセスできる。
アクセス修飾子はPrivate, Protected, Publicなどを指定できる。フレンズ関数も作成できる。
プロパティはGetまたはSetでも作成できるが、Property文を使えば自動で作成できる。
継承はInherits文で行う。
インターフェースはInterface文で宣言し、Implements文で実装できる。
(VisualBasic2010パーフェクトマスター (Perfect Master SERIES)を参考に執筆しました。)
オブジェクト指向も参照のこと。
以下は自分で書いたコード。
クラス定義:
Public Class Hoge Private x As Integer Private y As Integer Public Sub New(ByVal a_x As Integer, ByVal a_y As Integer) x = a_x y = a_y End Sub Public Property X() As Integer Get Return x End Get Set (ByVal s_x As Integer) x = s_x End Set End Property Public Property Y() As Integer Get Return y End Get Set (ByVal s_y As Integer) y = s_y End Set End Property Public Function Add() As Integer Return x + y End Function Public Function Sub() As Integer Return x - y End Function Public Function Mul() As Integer Return x * y End Function Public Function Div() As Integer Return x / y End Function End Class
クラスの利用:
Dim x As Integer = 10 Dim y As Integer = 20 Dim hoge As New Hoge(x, y) Console.WriteLine("{0} + {1} = {2}", hoge.X, hoge.Y, hoge.Add()) Console.WriteLine("{0} - {1} = {2}", hoge.X, hoge.Y, hoge.Sub()) Console.WriteLine("{0} * {1} = {2}", hoge.X, hoge.Y, hoge.Mul()) Console.WriteLine("{0} / {1} = {2}", hoge.X, hoge.Y, hoge.Div()) hoge.X = 30 hoge.Y = 15 Console.WriteLine("{0} + {1} = {2}", hoge.X, hoge.Y, hoge.Add()) Console.WriteLine("{0} - {1} = {2}", hoge.X, hoge.Y, hoge.Sub()) Console.WriteLine("{0} * {1} = {2}", hoge.X, hoge.Y, hoge.Mul()) Console.WriteLine("{0} / {1} = {2}", hoge.X, hoge.Y, hoge.Div())
以下の書籍が参考になります。
VB2(クラスライブラリ)も参照のこと。
VB3(フォームデザイナー)も参照のこと。
.NETを参照のこと。
Monoを参照のこと。
MS-Excel VBAも参照のこと。
旧来のVisual Basic。オブジェクト指向でなかった頃のVB。
VB 6.0アプリケーションを動かすにはランタイムが必要。
以下はVB 6.0のサンプル。
オブジェクト指向BASICを用いる、コンパイラと統合開発環境/RADツール。
「VB 6.0の再来」ともいえるような開発環境であり、Qt/GTK向けのGUIデザイナーが付属し、.NET化以前のVisual Basicに似た言語仕様を持つ。
VBは既に古い言語だと思っている人は多いでしょうが、実際、意外とVBは現場で使われています。
システム開発の現場で、Windows向けに開発する場合、VBを使うことは意外と多いです。
その理由は、「使える人が多いから」です。
VBは、使える人が開発現場に多く、みんなVBについてなら分かるため、今でもVBを開発用の言語に使うことが多いのです。
確かに、C#のような言語のほうが新しいですし、中にはF#とか、あるいはRustやGolangなども最先端の流行ではありますが、これらの言語は分かる人がVBに比べて少ないのです。
RustやGolangで開発をする際、問題が起きたらどのように解決すればいいのか、誰にも分かりません。特に、Rustには所有権や借用の概念があり、初心者が使うと所有権周りのエラーでコンパイルできないことが多々あり、解決にはそれなりの時間がかかります(たとえばGTKオブジェクトの利用 ~gtk-rsでデスクトップアプリ開発をはじめよう[中編] | gihyo.jpなどを参照のこと)。
それよりも、多少古い言語であっても、分かる人や情報の多いVBなどを使ったほうが、システム開発の工程は容易に進みます。
なので、VBは今でもシステム開発のために使われます。
あるいは、最近はフロントエンドとバックエンドを分けてWeb化したクラウドサービスとしてシステムを開発することが多いですが、VBを使うと、そのようなクラウド的なシステムではなく、GUIを使ったより簡単なアプリケーションが開発できます。
なので、Web以外のシステムであれば、VBを採用することは一般的なのです。
VBであっても、ネットワークを完全に使わないわけではありません。一般的なHTTP通信をVBで行うことは可能です。そして、最近のVBでは.NETというJavaとよく似たクラスライブラリが提供されており、.NETは現場の開発者から見てもとても便利で簡単に使えます。VBは決して「もう終わった言語」ではなく、「現役バリバリで使われる言語」なのです。
2023.08.16
書籍