「Visual Basic .NET」の版間の差分
Superveryhothot (会話 | 投稿記録) m編集の要約なし |
|||
50行目: | 50行目: | ||
従来のVisual Basicのコード例: |
従来のVisual Basicのコード例: |
||
< |
<syntaxhighlight lang="vb"> |
||
Private Sub Command1_Click() |
Private Sub Command1_Click() |
||
MsgBox "Hello, World" |
MsgBox "Hello, World" |
||
End Sub |
End Sub |
||
</syntaxhighlight> |
|||
</source> |
|||
Visual Basic .NETのコード例: |
Visual Basic .NETのコード例: |
||
< |
<syntaxhighlight lang="vbnet"> |
||
'Imports System.Windows.Forms ' Windows Forms の場合。 |
'Imports System.Windows.Forms ' Windows Forms の場合。 |
||
'Imports System.Windows ' WPF の場合。 |
'Imports System.Windows ' WPF の場合。 |
||
64行目: | 64行目: | ||
MessageBox.Show("Hello, World") |
MessageBox.Show("Hello, World") |
||
End Sub |
End Sub |
||
</ |
</syntaxhighlight>なお、Visual Basic .NETでも旧VBや[[VBScript]]<ref>[https://msdn.microsoft.com/ja-jp/library/cc410277.aspx MsgBox 関数]</ref> <ref>[https://msdn.microsoft.com/ja-jp/library/cc392490.aspx バージョン情報 (VBScript)]</ref>に実装されていた旧MsgBox関数などの互換機能はライブラリによってサポートされている<ref name=":0" /> <ref>[https://msdn.microsoft.com/ja-jp/library/139z2azd%28v=vs.90%29.aspx MsgBox 関数 (Visual Basic)]</ref> <ref>[http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_06/opensemi_06_02.html 第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法 - @IT]</ref>が、以下のように<code>()</code>を使ったメソッド呼び出しの形で記述しなければならない。 |
||
< |
<syntaxhighlight lang="vbnet"> |
||
Imports Microsoft.VisualBasic.Compatibility ' ファイル先頭に記述する。 |
Imports Microsoft.VisualBasic.Compatibility ' ファイル先頭に記述する。 |
||
Private Sub Button1_Click(ByVal sender As System.Object, _ |
Private Sub Button1_Click(ByVal sender As System.Object, _ |
||
71行目: | 71行目: | ||
MsgBox("Hello, World") |
MsgBox("Hello, World") |
||
End Sub |
End Sub |
||
</syntaxhighlight> |
|||
</source> |
|||
==== オブジェクト指向への対応 ==== |
==== オブジェクト指向への対応 ==== |
||
87行目: | 87行目: | ||
== コード例 == |
== コード例 == |
||
以下はコンソールに"Hello, World!"と出力する例である。 |
以下はコンソールに"Hello, World!"と出力する例である。 |
||
< |
<syntaxhighlight lang="vb"> |
||
Module Module1 |
Module Module1 |
||
Sub Main() |
Sub Main() |
||
93行目: | 93行目: | ||
End Sub |
End Sub |
||
End Module |
End Module |
||
</syntaxhighlight> |
|||
</source> |
|||
== 歴史 == |
== 歴史 == |
2020年7月5日 (日) 22:44時点における版
パラダイム | 構造化プログラミング, 命令型プログラミング, オブジェクト指向, 宣言型プログラミング |
---|---|
登場時期 | 2001年[1] |
設計者 | マイクロソフト |
開発者 | マイクロソフト |
最新リリース | 2019 (16.2)/ 2019年7月24日 |
型付け | 強い静的型付け |
主な処理系 | .NET Framework、 Roslyn コンパイラ および Mono |
方言 | .NET 2002 (7.0), .NET 2003 (7.1), 2005 (8.0), 2008 (9.0), 2010 (10.0), 2012 (11.0), 2013 (12.0), 2015 (14.0), 2017 (15.0), 2019 (16.0) |
影響を受けた言語 | Visual Basic, C# |
影響を与えた言語 | Small Basic |
プラットフォーム | Microsoft Windows |
ウェブサイト | Visual Basic |
拡張子 |
.vb |
Visual Basic .NET (ヴィジュアル ベーシック ドットネット)はマイクロソフトが開発したプログラミング言語およびその処理系。VB.NETと略されて呼ばれることが多い。.NETに対応していない旧来のVisual Basic(バージョン6.0まで、VB6)の後継である。
なおVisual Studio 2005以降では、「Visual Basic .NET」や「VB.NET」という呼称ではなく、従来のように「Visual Basic」という呼称が用いられるようになっている[2]が、6.0以前との互換性はなく、また.NETベースであることには変わりない。
概説
C++やJava、C#などのC系言語と比較して、VB/VB.NETは文法が自然言語に近いため、プログラミング初心者にも比較的習得しやすく、また使いやすいといわれている[要出典]が、本格的なソフトウェアの作成にも使用できる。なおVB.NETはマイクロソフトが推進している.NETの一環で開発された言語であり、アプリケーション実行コードは.NET Framework上で動作するほか、言語仕様にオブジェクト指向が本格的に取り入れられるなど、前バージョンのVisual Basic 6.0からの変更点はかなりの数にのぼり、言語仕様の互換性は低い。VB.NETに移行できない旧VB製アプリケーションを救済するため、VB.NETがリリースされた後にリリースされたMicrosoft Windows OSにおいても、旧VBの開発環境や旧VBランタイムのサポートが条件付きで継続されるなどの特別延命措置が図られたりしている。Visual Basic .NETには、従来のVisual Basicからの移行を容易にするアップグレードウィザード[3]や、従来の一部機能を実現する互換ライブラリが実装されている[4] [5]。
コンパイラはマイクロソフトから無料で提供されているので、Windows付属のメモ帳等を使ってプログラムすることもできるが、専用に開発された統合開発環境を使って開発するのが一般的である。
かつては旧来のVisual Basicと同様、製品は有償でのみ提供されていたが、バージョン2005以降は機能制限版であるExpressエディションが、またバージョン2013以降はProfessionalエディション相当の機能を持ちライセンス制約の強いCommunityエディションがそれぞれ無償で配布されている。
VB.NETではMicrosoft Windows用のアプリケーション開発、Web用のアプリケーション開発、およびモバイル向けのアプリケーション開発などを行なうことができる。利用可能なVisual Studioプロジェクトテンプレートも、Visual C#とほぼ同様である。
実行速度
旧来のVBはVisual C++と比較してアプリケーションの実行速度性能に問題が発生することもあったが、実行環境を.NET Frameworkに移したVB.NETでは、最終的にコンパイラが出力するコードはVisual C#等と同じMSIL中間コード (Javaのバイトコードに近い) であるため、他の.NET言語と比較して速度面でも遜色ないものとなっている。なお、MSILは実行時に.NETのJITコンパイラにより最適化されたネイティブコードに変換される。
DirectXのサポート
Direct3Dなどのマルチメディアコンポーネントを含むMicrosoft DirectXに関しては、VB.NETおよびVisual C#などの.NET言語からDirectX 9を操作するための.NETマネージ ライブラリであるManaged DirectXが提供されている。なお、XNAのリリースに伴い、Managed DirectXの更新は終了しているが、Windows API Code Pack for Microsoft .NET Frameworkと呼ばれるWindows APIおよびDirectXを含むCOMコンポーネントの.NET用ラッパーライブラリ、もしくはオープンソース開発されているSlimDXライブラリやSharpDXライブラリなどを使用することで、.NET言語からもDirectX 9、DirectX 10、DirectX 11やDirectX 12を使用することが可能となっている。C++/CLIなどのグルー言語により独自のラッパーを明示的に作成することで、.NET言語からDirectXを間接的に利用することも可能である。
従来のVisual Basicとの文法の比較
これらは旧Visual BasicとVisual Basic .NETの文法の類似点を示したサンプルコードである。どちらもメッセージボックスに"Hello, World"のメッセージとOKボタンを表示させるものである。
従来のVisual Basicのコード例:
Private Sub Command1_Click()
MsgBox "Hello, World"
End Sub
Visual Basic .NETのコード例:
'Imports System.Windows.Forms ' Windows Forms の場合。
'Imports System.Windows ' WPF の場合。
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show("Hello, World")
End Sub
なお、Visual Basic .NETでも旧VBやVBScript[6] [7]に実装されていた旧MsgBox関数などの互換機能はライブラリによってサポートされている[5] [8] [9]が、以下のように()
を使ったメソッド呼び出しの形で記述しなければならない。
Imports Microsoft.VisualBasic.Compatibility ' ファイル先頭に記述する。
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("Hello, World")
End Sub
オブジェクト指向への対応
VB6ではクラスモジュールの定義、メンバー変数やメソッドのカプセル化、インターフェイスの実装によるポリモーフィズムをサポートしていた。ただしクラスの継承はサポートせず、オブジェクト指向プログラミングを完全サポートしているとは言い難かった。VB.NETではクラス継承がサポートされ、本格的なオブジェクト指向言語となった。
.NET Frameworkライブラリ
VB6ではVisual Basicに固有のステートメントによってフォームの制御や文字列の操作をプログラムしていたが、VB.NETではC#などと共通に使われる.NET Frameworkの標準ライブラリに従ったプログラミングが必要となった。このため、従来のVBプログラマのノウハウが通用しにくい状況が生まれた。このことがVBプログラマがVB6からVB.NETへの移行が進まない原因の一つではないかとの指摘がある[要出典]。
エラー処理
VB6ではエラー発生時にOn Error GoTo
文によってメソッド内のエラー処理にジャンプさせる方式であった。VB.NETではC#やJavaなどと同様に、Try - Catch - Finally
による例外処理を記述できる。これによって呼び出し先メソッド内部で生じたエラーを、呼び出し側メソッドで一括して取り扱うことができるなど、プログラムの柔軟性が増した。
固定長文字列の廃止
他の.NET言語との互換性確保のため[10]、固定長文字列は (基本データ型としては) サポートされなくなった。Visual Basic 6.0互換関数が用意されているが、マルチバイト文字では正常に動作しないため、目的の出力形式にエンコードしてバイト数をカウントしてから処理を行うといったコーディングが必要となる。
コード例
以下はコンソールに"Hello, World!"と出力する例である。
Module Module1
Sub Main()
Console.WriteLine("Hello, World!")
End Sub
End Module
歴史
バージョン7.xに限りVisual Basic .NETと称しているが、従来のようにVisual Basicと名称が改められた8.0以降もVB.NETの系列であることに違いはない。Microsoft.VisualBasic.dllやvbc.exe、およびVisual Studio IDEのバージョン情報ダイアログに見られるように、製品バージョンおよび内部バージョンはVisual Studioと同様のバージョン番号が割り当てられている。また、内部バージョン13は忌み番のためスキップされた。
製品名 | バージョン | 内部バージョン | リリース | 備考 |
---|---|---|---|---|
Visual Basic .NET | 2002 | 7.0 | 2002年 | 言語仕様の大幅変更(完全なオブジェクト指向)。実行環境に .NET Framework 1.0 を採用。 |
Visual Basic .NET 2003 | 2003 | 7.1 | 2003年 | .NET Framework 1.1 に対応。 |
Visual Basic 2005 | 2005 | 8.0 | 2005年 | .NET Framework 2.0 に対応。 |
Visual Basic 2008 | 2008 | 9.0 | 2007年 | LINQやラムダ式の導入など言語機能を強化。.NET Framework 3.5 に対応。 |
Visual Basic 2010 | 2010 | 10.0 | 2010年 | .NET Framework 4.0 に対応。 |
Visual Basic 2012 | 2012 | 11.0 | 2012年 | .NET Framework 4.5 に対応。Async/Awaitの導入。 |
Visual Basic 2013 | 2013 | 12.0 | 2013年 | .NET Framework 4.5.1 に対応。 |
Visual Basic 2015 | 2015 | 14.0 | 2015年 | .NET Framework 4.6 に対応。 |
Visual Basic 2017 | 2017 | 15.0, 15.3, 15.5, 15.8 | 2017年 | |
Visual Basic 2019 | 2019 | 16.0 | 2019年 | .NET Core対応に重点を置く。 |
Visual Basic .NET (2002) (VB.NET 7.0)
2002年に、Visual Basicを基に強いオブジェクト指向プログラミングの概念を取り入れた新しい言語Visual Basic .NETの開発環境・処理系として、Microsoft Visual Studio .NET (Microsoft Visual Basic .NET) がリリースされた。VB.NETはVB6の後継言語とされ、マイクロソフト社の.NET Frameworkという新しい技術基盤に対応している。対応する.NETのバージョンは.NET Framework 1.0。
VB.NETは新たにウェブサーバ用のプログラム、Web用のプログラムが開発できるなどのネットワーク開発機能が追加された。VB6の後継といっても、豊富なデバッグ機能が追加されたり、中間コード形式になるといった言語設計思想そのものが変わるなど、様々な点で大幅な機能の追加および削除が行われた。
Visual Basic .NET 2003 (VB.NET 7.1)
対応する.NETのバージョンは.NET Framework 1.1。
Visual Basic 2005 (VB 8.0)
製品名称からは「.NET」という名前がなくなったが、上記のVB.NETと連続性がある言語である。言語仕様が強化され、C# 2.0同様にジェネリックの要素が導入されたほか、パーシャルクラスや演算子のオーバーロードなどがサポートされた。また、開発環境も大きく強化されている。
対応する.NETのバージョンは.NET Framework 2.0であるが、Visual Studio用の拡張をインストールすることで.NET Framework 3.0対応アプリケーションの開発も可能になる。
Visual Basic 2008 (VB 9.0)
同時期にリリースされたC# 3.0に合わせて言語仕様が強化され、構造化照会構文であるLINQや、ラムダ式、匿名型などの要素が追加された。 対応する.NETのバージョンは.NET Framework 3.5(.NET 3.5は3.0および2.0の完全なスーパーセットのため、3.0および2.0のアプリケーション開発も可能となっている)。
Visual Basic 2010 (VB 10.0)
対応する.NETのバージョンは.NET Framework 4.0(3.5、3.0、2.0での開発も可能)。
C#の言語設計者として知られるアンダース・ヘルスバーグ氏が設計に携わり、VBとC#との間の言語間の格差の低減が図られるようになった[11] [12]。
Visual Basic 2012 (VB 11.0)
.NET Framework 4.5とともに公開。Visual Studio 2012に同梱される。
C# 5.0同様、非同期プログラミングを言語仕様レベルでサポートするAsync/Await構文を導入した。
Visual Basic 2013 (VB 12.0)
.NET Framework 4.5.1とともに公開。Visual Studio 2013に同梱される。Developer Packをインストールすることで.NET Framework 4.5.2対応アプリケーションの開発も可能になる[13]。
Visual Basic 2015 (VB 14.0)
2015年に.NET Framework 4.6とともに公開。Visual Studio 2015に同梱される。Roslynと呼ばれるコンパイラレイヤーにより、Visual C#と同等のIDE機能を備えるに至った[14]。
VB 14の主要な新機能は下記のとおり。
- Null値反映演算子
?.
- 複数行の文字列リテラル
NameOf
演算子- 文字列補間
- 行末コメント
Visual Basic 2017 (VB 15.x)
2017年にVisual Studio 2017とともに公開。15.0、15.3、15.5、15.8のリビジョンで新しいVisual Basic 15の言語機能を拡張した[15]。
Visual Basic 2019 (VB 16.0)
2019年にVisual Studio 2019とともに公開[16]。.NET Core に重点を置いた Visual Basic の最初のバージョンとなった[17]。
脚注
- ^ VB .NET プログラミングリファレンス - はしがき
- ^ Visual Basic リファレンス
- ^ VB 6.0 ユーザーのための VB .NET 移行ガイド - アップグレードウィザードの利用
- ^ ITレポート(動向/解説) - 【速報】これがニューVBだ!:ITpro
- ^ a b Visual Basic 6.0 互換性ライブラリ
- ^ MsgBox 関数
- ^ バージョン情報 (VBScript)
- ^ MsgBox 関数 (Visual Basic)
- ^ 第6回 VB開発者が最新.NET Frameworkを効率よく習得する方法 - @IT
- ^ VB 6.0 ユーザーのための VB .NET 移行ガイド - 固定長文字列
- ^ “Visual Basic 2010の新機能 - @IT”. 2011年11月3日閲覧。
- ^ VB.NETに未来はあるのか?
- ^ Download Microsoft .NET Framework 4.5.2 Developer Pack for Windows Vista SP2, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 SP2 Windows Server 2008 R2 SP1, Windows Server 2012 and Windows Server 2012 R2 from Official Microsoft Download Center
- ^ Visual Studio 2015の新機能“Roslyn”とは - Build Insider
- ^ Visual Basic の新機能 - Visual Basic | § Visual Basic 2017, 15.3, 15.5, 15.8 | Microsoft Docs
- ^ Visual Studio 2019 リリースノート
- ^ Visual Basic の新機能 - Visual Basic | § Visual Basic 16.0 | Microsoft Docs