Visual Basic ( VB ) は、元々はVisual Basic .NET ( VB.NET ) と呼ばれていましたが、Microsoftが開発し、 .NET、Mono、および.NET Framework上で実装されているマルチパラダイムのオブジェクト指向プログラミング言語です。Microsoft は、Visual Basic 6.0 が最後のバージョンであったオリジナルの Visual Basic言語の後継として、2002 年に VB.NET をリリースしました。2005 年に名前から ".NET" の部分が削除されましたが、この記事では、2002 年以降にリリースされたすべての Visual Basic 言語を指すために "Visual Basic [.NET]" を使用し、従来の Visual Basicと区別しています。C #およびF#とともに、.NET エコシステムを対象とした 3 つの主要言語の 1 つです。Microsoft は、2023 年 2 月 6 日に VB 言語戦略を更新し、VB は現在安定した言語であり、Microsoft は引き続きメンテナンスを行うが、新しいワークロードのサポートは追加しないと述べています。[ 6 ]
Microsoft のVisual Basic 開発用統合開発環境(IDE) はVisual Studioです。Visual Studio のほとんどのエディションは商用版ですが、Visual Studio ExpressとVisual Studio Communityはフリーウェアです。さらに、.NET Framework SDKには、vbc.exe というフリーウェアのコマンドラインコンパイラが含まれています。Monoにも VB.NET のコマンドラインコンパイラが含まれています。
Visual Basicは、 Windows用のデスクトップアプリケーションを作成する際に、Windows Forms GUIライブラリと組み合わせて使用されることがよくあります。Visual BasicでWindows Formsをプログラミングするには、 GUIデザイナーを使用してフォーム上にコントロールをドラッグアンドドロップし、各コントロールに対応するコードを記述します。
Windows Formsライブラリは、Visual BasicでGUIインターフェイスを作成する際に最も一般的に使用されます。Windows Formsクラスライブラリのすべての視覚要素は、Controlクラスから派生しています。これにより、位置、サイズ、色、フォント、テキストといったユーザーインターフェイス要素の最小限の機能に加え、クリックやドラッグ&ドロップなどの一般的なイベントが提供されます。Controlクラスはドッキング機能も備えており、コントロールが親要素の下で位置を再配置できます。
フォームは通常、Visual Studio IDEで設計されます。Visual Studio では、ドラッグ アンド ドロップ操作でフォームを作成します。ツールを使用して、コントロール (テキスト ボックス、ボタンなど) をフォーム (ウィンドウ) 上に配置します。コントロールには、属性とイベント ハンドラーが関連付けられています。コントロールの作成時にデフォルト値が設定されますが、Visual Studio IDE の GUI またはコードで変更できます。多くの属性値は、ユーザーの操作や環境の変化などに基づいて、実行時にコードで変更できるため、動的なアプリケーションを実現できます。たとえば、フォームのサイズ変更イベント ハンドラーにコードを挿入することで、コントロールの位置を変更してフォームの中央に配置したり、フォーム全体に拡大したりすることができます。テキスト ボックスのキー押下イベント ハンドラーにコードを挿入することで、入力されたテキストの大文字と小文字を自動的に変換したり、特定の文字の入力を防止したりすることもできます。
Visual Basic では、ステートメントを使用してアクションを指定します。最も一般的なステートメントは、評価する式を 1 行に記述する式ステートメントです。この評価の一環として、関数またはサブルーチンが呼び出され、変数に新しい値が割り当てられることがあります。ステートメントの通常の順次実行を変更するために、Visual Basic は予約語で識別されるいくつかの制御フロー ステートメントを提供します。構造化プログラミングは、2 つの条件付き実行構造 ( If... Then... Else...End Ifおよび Select Case... Case... End Select) と 4 つの反復実行 (ループ) 構造 ( Do... Loop、For... 、 To、For EachおよびWhile... End While) を含むいくつかの構造によってサポートされています。For...Toステートメントには、初期化セクションとテストセクションが別々にあり、どちらも存在する必要があります。(以下の例を参照してください。) このFor Eachステートメントは、リスト内の各値を順に処理します。
さらに、Visual Basicでは:
REM以下は、Visual Basicで作成された非常にシンプルなプログラムで、古典的な「Hello, World!」の例をコンソールアプリケーションとして作成したものです。
モジュールモジュール1Sub Main () ' 定番の「Hello, World!」デモプログラムConsole.WriteLine ( " Hello , World!" ) End Subエンドモジュールコマンドラインウィンドウに「Hello, World! 」と表示されます。各行にはそれぞれ特定の役割があり、以下のとおりです。
モジュールモジュール1これはモジュールの定義です。モジュールはコードの分割であり、定数や変数、関数やメソッド、クラスなど、あらゆる種類のオブジェクトを含めることができますが、クラスなどのオブジェクトとしてインスタンス化したり、他のモジュールから継承したりすることはできません。モジュールは、プログラムの他の部分から参照できるコードのコンテナとして機能します。[ 8 ]モジュールとそれを含むコードファイルの名前が同じであることは一般的ですが、1 つのコードファイルに複数のモジュールやクラスが含まれる場合もあるため、これは必須ではありません。
サブメイン()この行は「Main」というサブルーチンを定義します。「Main」はプログラムの実行開始点です。[ 9 ]
Console.WriteLine ( "Hello, world ! " )この行は、実際に出力を書き込む処理を実行します。Consoleはシステムオブジェクトであり、コマンドラインインターフェイス(「コンソール」とも呼ばれます)を表し、オペレーティングシステムの標準ストリームへのプログラムによるアクセスを可能にします。プログラムはConsole のWriteLineメソッドを呼び出し、渡された文字列をコンソールに表示させます。
Console.WriteLine の代わりに、MsgBox という代替手段があります。これは、コマンドライン ウィンドウではなくダイアログボックスにメッセージを表示します。[ 10 ]
このコードは、コンソールにフロイドの三角形を出力します。
Imports System.ConsoleモジュールプログラムSub Main () Dim rows As Integer' 入力検証。Do Until Integer . TryParse ( ReadLine ( "表示する行数を入力してください: " & vbcrlf ), rows ) AndAlso rows >= 1 WriteLine ( "許容範囲は 1 から {0}" , Integer . MaxValue ) Loop ' フロイドの三角形の出力Dim current As Integer = 1 Dim row As Integer Dim column As Integer For row = 1 To rows For column = 1 To row Write ( "{0,-2} " , current ) current += 1 NextWriteLine () Next End Sub''' <summary> ''' Console.ReadLine と同様ですが、プロンプト文字列を受け取ります。''' </summary> Function ReadLine ( Optional prompt As String = Nothing ) As String If prompt IsNot Nothing Then Write ( prompt ) End IfConsole.ReadLine ()を返します。関数終了エンドモジュールVisual Basic .NET を単なる Visual Basic の別バージョンとみなすべきか、それとも全く別の言語とみなすべきかは議論の的となっている。構造化例外処理や短絡評価式などの新機能をサポートするために、新しい機能が追加されている。また、VB.NET への移行に伴い、データ型に 2 つの重要な変更があった。Visual Basic 6 と比較すると、Integerデータ型の長さが 16 ビットから 32 ビットに倍増し、Longデータ型の長さが 32 ビットから 64 ビットに倍増した。これは、すべてのバージョンの VB.NET に当てはまる。すべてのバージョンの VB.NET における 16 ビット整数は、現在では と呼ばれるShort。同様に、Windows フォームエディターは、スタイルと機能において Visual Basic フォーム エディターと非常によく似ている。
大きく変化したのはセマンティクスです。COM をベースとした決定論的で参照カウント方式のエンジン上で動作するオブジェクト指向プログラミング言語から、 .NET Frameworkを基盤とする完全なオブジェクト指向言語へと変化しました。.NET Framework は、共通言語ランタイム(世代別ガベージコレクションとジャストインタイムコンパイルエンジンを使用する仮想マシン) と、はるかに大規模なクラスライブラリの組み合わせで構成されています。後者の拡張は、VB 開発者がこの言語に移行する際に直面した問題でもありましたが、 Visual Studio 2005 のMy機能によってある程度解決されました。
これらの変更により、アプリケーションのパフォーマンスと保守性に関して「正しい」ことを行うという多くの基本的な前提が変わりました。一部の関数とライブラリは存在しなくなりました。その他は利用可能ですが、「ネイティブ」の .NET の代替手段ほど効率的ではありません。コンパイルできたとしても、変換されたほとんどの Visual Basic 6 アプリケーションは、.NET 言語を最大限に活用するために、ある程度のリファクタリングが必要でした。Microsoft は、言語構文、アプリケーションのデバッグ、展開、用語の変更を網羅したドキュメントを提供しました。 [ 11 ]移行を容易にするために設計された人気の高い書籍は、Michael Halvorson 著のMicrosoft Visual Basic .NET Professional Step by Stepで、2002 年にMicrosoft Pressから出版されました。
以下の簡単な例では、VBとVB.NETの構文を比較します。開発者がフォームを作成し、その上にボタンを配置し、各例で示すサブルーチンを該当ボタンのクリックイベントハンドラーに関連付けていることを前提としています。各例では、フォーム上のボタンがクリックされた後に「Hello, World」というメッセージボックスが表示されます。
Visual Basic 6:
Private Sub Command1_Click () MsgBox "Hello, World" End SubVB.NET(MsgBoxまたはMessageBoxクラスを使用できます):
Private Sub Button1_Click ( sender As object , e As EventArgs ) Handles Button1 . Click MsgBox ( "Hello, World" ) End SubSubとステートメントを生成します。Visual Basic .NET は必要なとステートメントも生成します。開発者は ステートメントを追加するだけで、「Hello, World」メッセージ ボックスを表示できます。End SubClassEnd ClassCall) で異なる規則がありました。Command1はButton1必須ではありません。ただし、これらはそれぞれVisual Basic 6とVB.NETにおけるコマンドボタンのデフォルト名です。Handlesキーワードを使用してサブルーチンをオブジェクトのイベントのButton1_Clickハンドラーにします。Visual Basic 6 では、イベント ハンドラー サブルーチンには、オブジェクト名 ( )、アンダースコア ( )、イベント名 ( 、したがって) で構成される特定の名前が必要です。ClickButton1Command1_ClickCommand1_ClickMessageBox.Show名前空間には、 Visual Basic 6 の対応する関数と同様にMicrosoft.VisualBasic( の代わりに) 使用できる関数があります。どの関数をベストプラクティスとして使用するかについてはMsgBox議論があります[ 12 ] (メッセージ ボックスの表示に限らず、Microsoft.VisualBasic名前空間の他の機能に関しても)。フレームワーク クラスにはより多くの機能があり、言語固有性が低いことから、「.NET 方式」で行うことを好むプログラマもいます。一方、言語固有の機能を使用することでコードの可読性が向上すると主張する人もいます (たとえば、 の代わりにint(C#) またはInteger(VB.NET) を使用するなどSystem.Int32)。ByValsenderasObjectByValeasEventArgs次の例は、Visual Basic 6 と VB.NET の違いを示しています。どちらの例もアクティブなウィンドウを閉じます。
Visual Basic 6:
Sub cmdClose_Click () Unload Me End SubVB.NET:
Sub btnClose_Click ( sender As Object , e As EventArgs ) Handles btnClose . Click Close () End Sub前述の新しい規則に従い、「cmd」という接頭辞は「btn」という接頭辞に置き換えられます。
Visual Basic 6 には共通演算子ショートカットが用意されていませんでした。以下のショートカットはそれと同等です。
Visual Basic 6:
Sub Timer1_Timer () 'フォームの高さをティックごとに1ピクセル減らしますMe . Height = Me . Height - 1 End SubVB.NET:
Sub Timer1_Tick ( sender As Object , e As EventArgs ) Handles Timer1 . Tick Me . Height -= 1 End SubC# と Visual Basic は、.NET Framework 上でプログラミングするために Microsoft が最初に開発した言語です (後にF#などが追加され、他の言語も追加されています)。C# と Visual Basic は構文が異なりますが、違いはほぼそれだけです。Microsoft は、これら 2 つの言語を同じ .NET Framework 開発プラットフォームの一部として開発しました。どちらも、Microsoft の同じ言語開発チームによって開発、管理、サポートされています。[ 13 ]両者は、同じ .NET Framework ランタイム ライブラリに対して実行されるCIL と呼ばれる同じ中間言語 (IL) にコンパイルされます。 [ 14 ] プログラミング構造にはいくつかの違いがありますが、その違いは主に構文上のものです。Visual Basic 6 からの変換を支援するために Microsoft が提供する Visual Basic の「互換性」ライブラリを使用しないと仮定すると、VB のほぼすべての機能に C# の同等の機能があり、その逆も同様です。どちらの言語も、.NET Framework の同じ基本クラスを参照して機能を拡張し、どちらの言語も、もう一方の言語で記述されたコンパイル済みコードを参照できます。そのため、ごく一部の例外を除き、どちらの言語で書かれたプログラムでも、簡単な構文変換ツールを使えばもう一方の言語に変換できます。この目的のために、オープンソース製品や市販製品が数多く存在します。
Button1という名前のボタンが必要です。
公開クラスフォーム1Private Sub Button1_Click ( sender As Object , e As EventArgs ) Handles Button1 . Click MsgBox ( "Hello world!" , MsgBoxStyle . Information , "Hello world!" ) ' "Hello world!" というメッセージを表示します。End Sub End Class
モジュールモジュール1Sub Main () Console . WriteLine ( "Hello world!" ) ' コンソールに "Hello world!" と入力し、新しい行を開始します。Console . ReadKey () ' アプリケーションが終了する前に、ユーザーは任意のキーを押す必要があります。End Sub End Module「TextBox1」というタイトルのテキストボックスと、「Button1」というタイトルのボタンが必要です。
Public Class Form1 Private Sub Button1_Click ( sender As Object , e As EventArgs ) Handles Button1 . Click CreateObject ( "Sapi.Spvoice" ). Speak ( TextBox1 . Text ) End Sub End Classモジュールモジュール1Private Voice = CreateObject ( "Sapi.Spvoice" )プライベートテキストを文字列としてサブメイン()Console.Write ( "読み上げるテキストを入力してください: " ) ' "読み上げるテキストを入力してください: "Text = Console.ReadLine () ' ユーザーは読み上げるテキストを入力する必要があります。Voice.Speak ( Text ) ' ユーザーが入力したテキストを読み上げます。End Subエンドモジュール従来のVisual Basicバージョン6.0の後継として、Visual Basic .NETの最初のバージョンが2002年に登場しました。2020年現在10 バージョンの Visual Basic .NET がリリースされました。
最初のバージョンであるVisual Basic .NETは、.NET Framework 1.0をベースとしています。最も重要な機能はマネージドコードであり、これは従来のVisual Basicとは対照的です。
Visual Basic .NET 2003は、 .NET Framework 1.1とともにリリースされました。新機能には、.NET Compact Frameworkのサポートや、より優れたVBアップグレードウィザードが含まれていました。また、.NET IDE(特にバックグラウンドコンパイラ)とランタイムのパフォーマンスと信頼性も向上しました。さらに、Visual Basic .NET 2003はVisual Studio.NET Academic Editionに含まれており、各国の一定数の研究者に無償で配布されました。
Visual Basic .NET 2003の後、マイクロソフトは製品名から「.NET」を削除し、次のバージョンをVisual Basic 2005と名付けた。
今回のリリースでは、Microsoft は Visual Basic .NET を迅速なアプリケーション開発プラットフォームとして強化し、 C#との差別化をさらに図るために、以下のような多くの機能を追加しました。
My.Form2.Text=" MainForm "System.WindowsApplication1.Forms.Form2.text=" MainForm "他の.NET言語とのギャップを埋めるため、このバージョンでは以下の機能が追加されました。
Visual Basic 2005 では、を と等価にIsNotする演算子が導入されました。これは、Microsoft の特許出願の対象であることが判明し、悪名高くなりました[ 20 ] 。 [ 21 ] [ 22 ]'If X IsNot Y''If Not X Is Y'
Visual Basic 9.0は、.NET Framework 3.5とともに2007年11月19日にリリースされました。
今回のリリースでは、マイクロソフトは以下のような多くの機能を追加しました。
2010 年 4 月に、Microsoft は Visual Basic 2010 をリリースしました。Microsoft はこのリリースでDynamic Language Runtime (DLR)を使用する予定でしたが[ 23 ]、Visual Basic と姉妹言語である C# の共進化戦略に変更し、両言語の互換性をより高めました。Visual Basic の CLR および COM オブジェクトと動的にやり取りする固有の機能は、IronPythonやIronRubyなどの DLR 上に構築された動的言語と連携するように強化されました。[ 24 ] Visual Basic コンパイラは、一連の共通コンテキストで行継続を推論するように改良され、多くの場合、行継続文字「_」が不要になりました。また、既存のインライン関数のサポートに加えて、インライン Sub と Sub および Function ラムダの複数行バージョンもサポートされました。[ 25 ]
Visual Basic 2012は、.NET Framework 4.5と同時にリリースされました。このバージョンで導入された主な機能は以下のとおりです。
Visual Basic 2013 は、Visual Studio 2013 とともに .NET Framework 4.5.1 と同時にリリースされました。開発者パックをインストールすることで、.NET Framework 4.5.2 アプリケーションをビルドすることもできます。[ 26 ]
Visual Basic 2015 (コードネーム VB "14.0") は Visual Studio 2015 と共にリリースされました。言語機能には、インライン null チェックを実行する新しい "?." 演算子や、文字列をインラインでフォーマットするための新しい文字列補間機能が含まれています。[ 27 ]
Visual Basic 2017 (コードネーム VB "15.0") は Visual Studio 2017 と共にリリースされました。リビジョン 2017、15.3、15.5、15.8 で新しい Visual Basic 15 言語機能のサポートが拡張されています。ソース コードを 1 つのアクションで整理できる新しいリファクタリングが導入されています。[ 28 ] [ 29 ]
Visual Basic 2019 (コードネーム VB "16.0") は Visual Studio 2019 と共にリリースされました。[ 30 ]これは .NET Core に焦点を当てた最初の Visual Basic バージョンです。[ 31 ]
その後、Visual Basic 16.9 としてマイナーアップデートがリリースされ、初期化専用プロパティを使用する機能が追加されました。[ 32 ]これは、言語の現在の開発戦略に従って、 C# 9.0 [ 33 ]との互換性を維持するために行われました。 [ 34 ]
Visual Basic 17.0 では、System.Runtime.CompilerServices.CallerArgumentExpressionAttribute が有効になります。
Visual Basic 17.13 は、メソッド解決のために、アンマネージド ジェネリック制約と System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute を認識します。
公式の Visual Basic コンパイラは Visual Basic で記述されており、 .NET コンパイラ プラットフォームの一部として GitHub で入手可能です。[ 35 ] Visual Basic 開発用のオープンソース ツールの作成はC#に比べて遅れていますが、Mono開発プラットフォームは、Visual Basic 固有のライブラリの実装と、Visual Basic で記述された Visual Basic 2005 互換コンパイラ[ 36 ] 、およびWindows Forms GUI ライブラリなどの標準フレームワーク ライブラリを提供しています。
MonoDevelopはオープンソースの代替IDEでした。Gambas環境もVisual Basicと似ていますが、 FreeBasic用のVisual FB Editorと同様に、Visual Basicとは異なります。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)新しいDLRでは、IronPython、IronRuby、Javascript、そして新しい動的VBxコンパイルがサポートされています。
Basic は、IronPython や IronRuby などの動的言語のオブジェクトにバインドします。