Visual Basic

Visual Basic 6 IDE
Visual Basic（VB）是由微軟公司開發的包含環境的事件驅動編程語言。它源自於 BASIC 編程語言。VB 擁有圖形用戶界面（GUI）和快速應用程式開發（RAD）系統，可以輕易的使用 DAO、RDO、ADO 連接數據庫，或者輕鬆的創建 ActiveX 控件。程序員可以輕鬆地使用 VB 提供的組件快速建立一個應用程序。
2020 年 3 月 11 日宣佈微軟不會再開發 VB 或增加功能（Going forward, we do not plan to evolve Visual Basic as a language）。

**發展史**

**.NET Framework 引入之前**

**VB 1**
VB1.0的DOS版本
1991 年 4 月，Visual Basic 1.0 for Windows 版本發佈。1992 年 9 月，Visual Basic 1.0 for DOS 版本發佈。這個連接編程語言和用戶界面的進步被稱為 Tripod（有些時候叫做 Ruby），最初的設計是由阿蘭·庫珀（Alan Cooper）完成的。這在當時引起了很大的轟動。許多專家把 VB 的出現當做是軟件開發史上的一個具有劃時代意義的事件。以現在的眼光來看，VB1.0 版的功能其實非常的弱，但它在推出當時可是第一個“可視”的編程軟件。這使得程序員欣喜之極，都嘗試在 VB 的平臺上進行軟件創作。

**VB 2**
1992 年 11 月，VB2.0 發佈。它對於上一個版本的界面和速度都有所改善。

**VB 3**
1993 年夏天，VB3.0 發佈，分為標準版和專業版。其中包含一個數據引擎，可以直接讀取 Access 數據庫。這使得 VB 的數據庫編程能力大大提高。

**VB 4**
1995 年 8 月，VB4.0 發佈了 32 位版本和 16 位的版本。其中包含了對類的支持。從 VB4 開始，逐步引入了面向對象的程序設計思想。VB 功能強大，學習簡單。而且，VB 還引入了“控件”的概念，使得大量已經編好的 VB 程序可以被我們直接拿來使用。
Visual Basic 1.0~4.0 都必須將源代碼編譯成 VB 偽代碼後解釋執行。

**VB 5**
1997年2月，VB5.0 發佈。程序員可以用 32 位的版本導入由 4.0 版本創建的 16 位程序，並且能順利編譯。同時還包含了對用戶自建控件的支持。自從 Visual Basic 5.0 以後，VB 支持編譯成本機代碼，但必須在VB 運行庫的支持下工作。

**VB 6**
1998年夏天，VB6.0 發佈。VB6 是 VB.NET 至今仍無法完全取代的版本。 

**.NET Framework 引入之後**

**VB.NET （VB7）**
2001 年，Visual Basic .NET 和 .NET Framework發佈。由於其使用了新的核心和特性，所以很多 VB 的程序員都要改寫程序。
2002 年 Visual Basic .NET 2002（v7.0）問世，此後 Visual Basic 包含在 Visual Studio 套裝中。
2003 年 Visual Basic .NET 2003（v7.1）推出。

**VB 8**
2004年，微軟開放了 Visual Studio .NET 2005 的測試版本（代號Whidbey）。包含了 .NET Framework2.0 的測試版本。2005 年 11 月 7 日 Visual Basic 2005（v8.0）發佈，同時為初學者與學生提供 Visual Basic 2005 的免費簡化版本 Express Edition。原定免費使用期限一年，之後微軟宣佈 Express 版本永久免費。微軟在其軟件名稱中去掉了 .NET 部分。Visual Basic 2005 的“顯著”優點是，可以直接編寫出 Windows XP 風格的控件；但是其編寫的小程序就需要近 10MB 的內存。

**VB 9**
2008 年 2 月 1 日 Visual Basic 2008（v9.0）發佈。
通過幾年的發展，它已成為一種專業化的開發語言和環境。用戶可用 Visual Basic 快速創建 Windows 程序，現在還可以編寫企業水平的客戶/服務器程序及強大的數據庫應用程序。

**VB 10**
Visual Basic 10.0 按計劃於2010年3月22日隨 Visual Studio 2010 一起正式發佈。
新加入的功能：- 自動實現屬性- 集合初始化- 不需要在代碼斷行書寫時輸入下劃線“_”- 更好的 lambda 表達式支持- 更好地與 Python 及 Ruby 等動態語言的互通操作
Visual Basic .NET 2002（7.0）及以後的版本運行在 .NET Framework 環境下。

**Visual Basic 2012（VB 11.0）**

**Visual Basic 2013（VB 12.0）**

**Visual Basic 2015（VB 14.0）**
Visual Basic 2015（VB 14.0）於2015年7月20日發佈。

**由 VB 派生的語言**
微軟開發了一系列有關 VB 的腳本語言：- Visual Basic for Applications，即 VBA，包含在微軟的應用程序中（比如 Microsoft Office，常見的有 Excel），以及類似 WordPerfect Office 這樣第三方的產品裡面。VBA這樣嵌入在各種應用程序中看起來有些矛盾，但是它的功能和 VB 一樣強大。- VBScript 是 ASP 的預設語言，還可以用在 Windows 腳本編寫和網頁編碼(HTML)中。盡管它的語法類似於 VB，但是它卻是一種完全不同的語言。VBS 不使用 VB 執行庫執行，而是由 Windows 腳本宿主(wscript.exe - Microsoft Windows Based Script Host)解釋執行。這兩種語言之中的不同點影響 ASP 網站的表現。
當微軟準備開發一種新的編成工具的時候，第一決定就是利用最搶手的VB6來進行修改，或者就是重新組建工程開發新工具。微軟後來開發了 VB 的繼任者 Visual Basic .NET，同時也是 .NET 平臺的一部分。VB.NET  編成語言是一種真正的物件導向編成語言（VB4-VB6 祇能稱為基於對象而不是物件導向，最明顯的特徵就是 VB4-VB6 都不支持類的繼承），和傳統 Visual Basic 並不完全兼容。

**語言特性**
VB6的IDE畫面
VB 的中心思想就是要便於程序員使用，無論是新手或者專家。VB 使用了可以簡單建立應用程序的 GUI 系統，但是又可以開發相當複雜的程序。VB 的程序是一種基於窗體的可視化組件安排的聯合，並且增加代碼來指定組建的屬性和方法。因為默認的屬性和方法已經有一部分定義在了組件內，所以程序員不用寫多少代碼就可以完成一個簡單的程序。過去的版本里面 VB 程序的性能問題一直被放在臺面上討論，但是隨著計算機速度的飛速增加，關於性能的爭論已經越來越少。
窗體控件的增加和改變可以用拖放技術實現。一個排列滿控件的工具箱用來顯示可用控件（比如文本框或者按鈕）。每個控件都有自己的屬性和事件。默認的屬性值會在控件創建的時候提供，但是程序員也可以進行更改。很多的屬性值可以在運行時候隨著用戶的動作和修改進行改動，這樣就形成了一個動態的程序。舉個例子來說：窗體的大小改變事件中加入了可以改變控件位置的代碼，在運行時候每當用戶更改窗口大小，控件也會隨之改變位置。在文本框中的文字改變事件中加入相應的代碼，程序就能夠在文字輸入的時候自動翻譯或者阻止某些字符的輸入。
VB 的程序可以包含一個或多個窗體，或者是一個主窗體和多個子窗體，類似於操作系統的樣子。有很少功能的對話框窗口（比如沒有最大化和最小化按鈕的窗體）可以用來提供彈出功能。
VB 的組件既可以擁有用戶界面，也可以沒有。這樣一來服務器端程序就可以處理增加的模塊。
VB 使用引用計數的方法來進行垃圾收集，這個方法中包含有大量的對象，提供基本的面向對象支持。因為越來越多組建的出現，程序員可以選用自己需要的擴展庫。和有些語言不一樣，VB 對大小寫不敏感，但是能自動轉換關鍵詞到標準的大小寫狀態，以及強制使得符號表入口的實體的變量名稱遵循書寫規則。默認情況下字符串的比較是對大小寫敏感的，但是可以關閉這個功能。
VB 使得大量的外界控件有了自己的生存空間。大量的第三方控件針對 VB 提供。VB 也提供了建立、使用和重用這些控件的方法，但是由於語言問題，從一個應用程序創建另外一個並不簡單。

**術語**
在討論 Visual Basic（不包含 .NET）時，經常可以聽到以下這些術語，因此掌握這些術語的基本理解對初學者十分有幫助。- 控件：簡單的說，控件就是構成或者說建造 Visual Basic 應用程序的圖形化工具，包括窗體、按鈕、複選框、列表框、數據控件、表格控件和圖片控件等等。- 事件：由用戶或操作系統引發的動作，例如擊鍵、單擊鼠標（Click）、雙擊鼠標（DblClick）、一段時間的限制，或從端口接收數據。- 方法：嵌入在對象定義中的程序代碼，它定義對象怎樣處理信息並響應某事件。例如，數據庫對象有打開紀錄集並從一個記錄移動到另一個記錄的方法程序的基本元素，它含有定義其特徵的屬性，定義其任務和識別它可以響應的事件的方法。控件和窗體是Visual Basic中所有對象的示例。- 物件：一個控件、窗體等都可被看作一個物件。- 過程：為完成某些特定的任務而編寫的代碼段，過程通常用於響應特定的事件，也可以當作應用程序的用戶自定義函數來使用。- 屬性：屬性是組成用戶界面的各對象的性質的具體描述。例如上述“物件”中所提到的尺寸、位置、顏色、寬度、高度等等都稱為控件的屬性。屬性決定物件的外觀，有時也決定物件的行為。物件的屬性絕大部分是 VB 中已經事先定義好的，但也有的屬性是需要在應用過程中才去定義的。屬性即可為物件提供數據，也能從物件取回信息。

**VB.NET的變革**

**VB（6.0 及以前）不擁有的特性**
 繼承：Visual Basic 5 以後，VB雖然提供了簡化的類支持，但仍然不能滿足程序員的需求。- 多線程支持：雖然可以使用 Windows API 完成，不過穩定性與調試都很難保證。- 異常處理：只支持"On Error Goto line"語句。- 對指標的支持非常有限。- VB 只能支持 8 到 32 位的整數，很多語言都有無限制的支持。- VB 不允許在任何數組記憶體在不變的變量。- VB 不支持其它程序語言共享程序代碼。
Visual Basic .NET（VB 7.0）以後的版本基本支持了上述特性。

**VB 6與VB.NET比較**
VB.NET 的具體變革如下：- 子程序（函數）的定義與調用。- 數組的初值設定並且需要註明範圍。- 函數在格式上的改變：Date 函數、Time 函數、部分數學函數部分不能直接使用，String 函數不能使用，DatePart、DateAdd、DateDiff 函數的第一個參數在定義上有所改變。- Set 保留字不再使用。- Wend 保留字以 End While 取代。- 新增運算符：+=、-=、/=、*=、&=。

**缺點**
這樣大的變革一度被認為是微軟為了延長 VB 的生命力而做出的，結果把 VB 改得幾乎面目全非，成了一個類似於 C# 的新語言。VB6 的程序幾乎無法運行在 VB.NET 中，儘管微軟針對該問題提供了“升級嚮導”，也無法執行徹底的轉換。這樣，程序員不得不付出相當大的精力，手工轉換代碼。
2005 年，微軟宣佈將不會再對非 .NET 版本的 VB 進行支持。VB 社群立即作出反應表示關心這個消息，一些老用戶還遞交了希望能夠繼續對 VB 進行技術支持的請願書。微軟後續並沒有改變他們的決定，最終在 2008 年時微軟對從 1.0 到 6.0 的所有 Visual Basic 開發環境版本結束支持。

**關於VB的爭議**

**反對者**
VB 是一種充滿了爭議的語言：很多程序員對 VB 程序的品質有強烈的反感。很多人認為 VB 不配他們使用，認為它是一種給兒童和菜鳥程序員的語言。它自從設計開始就是一種簡單的語言。一些 C++ 和 Java 中的特性在 VB 中並沒有出現。在感受開發的方便和快速的同時，一些類似於編譯時進行類型和聲明檢查的功能在默認情況下是關閉的。這樣一些程序員一邊感嘆 VB 的易用性，一邊沮喪地看著一些類似於“未定義類型”錯誤的發生。
一些批評家認為 VB 的簡單特性使得其在未來具有傷害性。很多人自學了 VB，但是並沒有學到好的編程習慣。當 VB 進入課堂的時候，學生們不會學到很多基礎的程序技術和結構，因為很多技術已經包含在那些對用戶可見的組件裡面了。不用學習標準的編程習慣，因為 VB 具有可視化的特性，所以導致了一些莫名其妙的代碼的產生。而且很多錯誤和警告的檢查默認情況下都是關閉的，程序員很難找到隱藏的錯誤。有經驗的程序員在用 VB 編程的時候都會把這些選項打開。- 並不是非常簡便，它開發的程序只能運行在 Microsoft Windows 中。- VB 不能很好地綜合 Windows 的基礎 API，很多時候要使用低級運算的“小伎倆”來進行編程。而 C 語言的低級內存運算比 VB 的要簡單得多。

**支持者**
但是很多 VB 的支持者解釋說 VB 的易用性就是它最大的優勢，可以讓經驗豐富的 VB 程序員或是剛剛懂得皮毛的人都能用自己的方式快速開發程序。而且 VB 的程序可以非常簡單的和數據庫連接。比如利用控件可以綁定數據庫，這樣一來用 VB 寫出的程序就可以掌握數據庫的所有信息而不用寫一行代碼。
很多語言的特性比如 GoSub、On Error 和用變量名字的最後一個字符判斷宣告類型（比如字符串型 str$）都是從BASIC中來的。VB 的語法和絕大部分語言都不同，可能會讓新的程序員混淆。比如宣告“Dim a, b, c As Integer”宣告了 c 為整數變數，但是 a,b 依然是 Variant（.NET中 為 Object）類型的。（如果想宣告 3 個 Integer，必須寫 Dim a As Integer, b As Integer, c as Integer；而直接寫 Dim a，後面不寫類型，則自動變成 Variant 類型——佔用大量資源。這個問題在 VB.NET 以後的版本已經解決，Dim a, b, c As Integer 的類型都將為整數）
還有一些特性，比如下劃線字符 _ 支持一行代碼分多行寫。一些程序員在使用的時候由於不符規範而引起錯誤。

**總結**
VB 會吸引更多的讚譽和批評，也會繼續為廣大的用戶和程序員使用。它比較適合用來開發提供友好界面的程序（比如針對伺服器的數據），但是不適合開發需要進行繁重運算的程序（如聯合計算程序）。
對於初學編程者，VB是一個很好的入門軟件，對於一些有編程才能而未發掘的人，由 VB 著手可輕易引發他們的潛能，發揮他們在這方面的才華。

**參考文獻**

**外部連結**
  MSDN上的VB6支持 date=20141218000825 -  VB6支持-  VB的教程date=20050823102313 -  VB6中文教程date=20080702002229 -  VBGood（VB愛好者樂園） date=20211224021716 -  play78（VB源代碼）-  Applevb（AppleVB）-  博客園VB團隊-  VB源碼分享（VB源碼庫）-  Studio Express首頁（下載） date=20160311080319