Basic語言的全名是Beginner's All-purpose Symbolic Instruction Code(初學者通用的符号指令代碼),是幾十年前流行過的一門語言。我高中時候一門數學選修課中使用的也是Basic語言。我還記得當時我為了使用Basic語言,還從網上下了一個簡陋的QBasic工具。當時第一次接觸程式設計的我對程式設計語言充滿了興趣。當然在現在,Basic語言已經基本沒什麼用了。現在還在使用的Basic語言大概就是微軟的Visual Basic了。今天就來介紹一下Visual Basic語言。需要注意的是,VB語言運作在微軟的CLR上,是以如果你對C#比較熟悉的話,學習VB就很簡單了。
HelloWorld
照例,第一個項目自然應該是HelloWorld。打開Visuall Studio,建立一個VB項目,然後就會出現如下圖所示的代碼。

來解釋一下HelloWorld的代碼。首先第一行是導入類庫,和C#、java的import語句是一個道理。然後下面定義了一個Program子產品,其中定義了Main函數,在函數中輸出Hello World。在VB中,不使用大括号作為塊分隔符,而是使用End語句來結束塊作用域。
Imports System
Module Program
Sub Main(args As String())
Console.WriteLine("Hello World!")
End Sub
End Module
基本資料類型
由于VB和C#都是運作在CLR上的語言,是以其實它們的基本類型是一樣的,都有有/無符号的各種長度整數、單精度雙精度浮點數、布爾類型、字元和字元串等類型。下面的代碼僅列出幾個常用的。
Public Class DataType
Sub DataType()
Dim b As Byte
Dim i As Integer
Dim s As Single
Dim d As Double
Dim c As Char
Dim str As String
Dim bool As Boolean
b = 100
i = 1000
s = 1.5
d = 3.1415926
c = "c"c
str = "abc"
bool = True
End Sub
End Class
變量和常量
VB的變量定義也和C系語言不同,使用的是
Dim 變量名 As 變量類型
的文法進行定義。變量必須先定義才能使用。如果想同時定義多個變量,可以這麼寫。
Dim i, j As Integer
如果想在定義變量的同時初始化,可以這樣。
Dim bool As Boolean = True
如果要定義常量,可以變量類似,隻不過使用
Const
關鍵字。
Const cs As Integer = 1000
運算符
先來看看算術運算符。
用途 | 例子 | |
---|---|---|
^ | 幂運算符 | 3 ^ 2 = 9 |
+ | 加法 | |
- | 減法 | |
* | 乘法 | |
/ | 小數除法 | 3 / 2 = 1.5 |
| 整除 | 3 2 = 1 |
MOD | 取模 | 6 MOD 4 = 2 |
然後是比較運算符。這裡需要注意的就是VB的相等和不等和其他語言的可能不太一樣。
= | 相等 |
<> | 不等 |
< | 小于 |
> | 大于 |
<= | 不大于 |
>= | 不小于 |
然後是邏輯運算符。
And | 與運算符,不短路求值 |
Or | 或運算符,不短路求值 |
Not | 非運算符 |
Xor | 異或運算符 |
AndAlso | 與運算符,短路求值 |
OrElse | 或運算符,短路求值 |
IsTrue | 是否為真 |
IsFalse | 是否為假 |
條件語句
If語句
先來看看VB中的If語句,其基本結構是
If 條件 Then 執行體 Else 執行體 End If
。
Dim num As Integer = 5
If num\2 = 0 Then
Console.WriteLine($"{num} is even")
Else
Console.WriteLine($"{num} is odd")
End If
如果需要多重If語句,可以添加ElseIf語句塊。
If num = 1 Then
Console.WriteLine($"{num} is 1")
ElseIf num = 2
Console.WriteLine($"{num} is 2")
Else
Console.WriteLine($"{num} is other")
End If
Select語句
Select語句相當于其他語言中的switch語句,如果沒有比對項,會執行Case Else語句塊。
Dim c As Char = "c"c
Select c
Case "a"c
Console.WriteLine("a")
Case "b"c, "c"c
Console.WriteLine("b or c")
Case Else
Console.WriteLine("others")
End Select
循環語句
Do語句循環
Do語句循環有兩種結構,第一種是循環條件在前。先來看看Do-While語句,當滿足循環條件的時候會繼續循環,不滿足條件時跳出循環。這裡順便提一下,VB中沒有塊注釋,隻有單行注釋,以單引号開頭,直到句末。
'Do While語句
Dim i = 0
Do While i < 5
If i = 3 Then
Exit Do
End If
Console.Write(i)
i += 1
Loop
再來看看Do-Until語句,和Do-While相反,在不滿足條件的時候會執行循環,滿足條件時跳出循環。
'Do Until語句
i = 0
Do Until i > 5
If i < 3 Then
i += 2
Continue Do
End If
Console.Write(i)
i += 1
Loop
Do循環的第二種形式就是先執行循環體,然後進行判斷,同樣有While和Until兩種。
i = 0
Do
Console.Write(i)
i += 1
Loop While i < 5
Console.WriteLine
While循環
還有就是傳統的While循環。
'While循環
i = 0
While i < 5
Console.Write(i)
i += 1
End While
For循環
下面是For循環的例子,在For循環中可以使用Step指定步長。
For counter As Integer = 1 To 9 Step 1
Console.Write(counter)
Next
Foreach循環
Foreach循環用于疊代一個清單中的每一項。
Dim array() as Integer = {1, 2, 3, 4, 5, 6, 7}
For Each item As Integer In array
Console.Write(item)
Next
With語句
With語句其實不算循環語句,不過我看的這個VB教程把With語句放到這裡說,那我也放到這裡好了。With語句在有些語言中也有,主要用途是節省代碼數量。比方說有下面這個Person類。
Public Class Person
Public Property Name As String
Public Property Age As Integer
End Class
假如有一個person對象多次出現的話,就可以使用With語句,在With語句中,點通路符預設指向的就是With語句指定的對象。
Dim person As Person = New Person
With person
.Name = "yitian"
.Age = 25
Console.WriteLine($"Person(Name:{.Name}, Age:{.Age})")
End With
跳轉語句
Exit語句
Exit語句用于結束某個代碼塊,它的形式如下。想用Exit退出哪個代碼塊,就寫哪個代碼塊的類型。
Exit { Do | For | Function | Property | Select | Sub | Try | While }
Continue語句
Continue語句用于結束目前循環,直接進行下一次循環。它的形式如下,後面跟要繼續的代碼塊類型。
Continue { Do | For | While }
Goto語句
最後就是Goto語句,它會直接跳轉到指定的标簽處。
'Goto語句
GoTo Ending
Console.WriteLine("Print something")
Ending:
Console.WriteLine("This is end.")
數組
先來看看數組定義。VB中的數組比較特殊,定義一個
Dim a1(3)
,其實是下标0-4長度為四的一維數組,這一點要非常注意。
'下标0-9的十個元素的數組
Dim array1(9) As Integer
'11X11的二維數組
Dim array2(2, 2) As Integer
'定義并初始化數組
Dim array3() = {1, 2, 3, 4, 5}
'鋸齒數組,也就是數組的數組
Dim array4 As Integer()() = New Integer(1)() {}
array4(0) = New Integer() {1, 2}
array4(1) = New Integer() {3, 4}
通路數組元素需要使用圓括号,而不是一般語言的方括号。
'初始化一維數組
For i As Integer = 0 To 9
array1(i) = i
Next
'初始化二維數組
For i = 0 To 2
For j = 0 To 2
array2(i, j) = (i + 1)*(j + 1)
Next
Next
最後就是周遊數組了,可以使用For循環疊代下标,或者用Foreach循環直接周遊元素。
'顯示數組
For Each e In array1
Console.Write(e)
Next
Console.WriteLine
For i As Integer = 0 To 2
For j = 0 To 2
Console.Write(array2(i, j))
Next
Console.WriteLine
Next
For Each e In array3
Console.Write(e)
Next
Console.WriteLine
For i As Integer = 0 To 1
For j = 0 To 1
Console.Write(array4(i)(j))
Next
Console.WriteLine
Next
函數
Sub函數
回頭來看看前面的HelloWorld,其中就有一個Main函數,它是一個Sub函數,也就是沒有傳回值的函數。
Imports System
Module Program
Sub Main(args As String())
Console.WriteLine("Hello World!")
End Sub
End Module
函數可以按值傳參,也可以按引用傳參,預設情況下是按值傳參。
Function GetParam(ByVal a As Integer, ByRef b As Integer)
a = 10
b = 10
Console.WriteLine("Param changed")
End Function
Function函數
Function函數就是有傳回值的函數。在函數中,如果要傳回值,可以有兩種辦法,第一種是使用Return語句,第二種是在函數體中向函數名指派。
'函數傳回值可以用Return語句
Function Return1() As Integer
Return 1
End Function
'也可以向函數名指派
Function Return2() As Integer
Return2 = 2
End Function
可變參數清單
可變參數清單使用
ParamArray
聲明。
Function PrintIntegers(ParamArray integers As Integer())
For Each i In integers
Console.Write(i)
Next
Console.WriteLine
End Function
面向對象程式設計
類
VB的類和C#的類非常相似,同樣有字段、屬性等概念。構造函數使用New聲明,不需要傳回值。析構函數使用Finalize聲明,也不需要傳回值。
Class Contact
' 字段
Private _name As String
Private _tel As String
'構造函數
Public Sub New(name As String, tel As String)
_name = name
_tel = tel
End Sub
'析構函數
Protected Overrides Sub Finalize()
End Sub
'屬性
Public Property Tel As String
Get
Return _tel
End Get
Set
_tel = value
End Set
End Property
Public Property Name As String
Get
Return _name
End Get
Set(value As String)
_name = value
End Set
End Property
'重寫方法
Public Overrides Function ToString() As String
Return $"Contact(Name:{Name}, Tel:{Tel})"
End Function
End Class
抽象類和接口
如果一個類的方法含有MustOverride修飾符,那麼這個方法就是一個抽象方法。含有抽象方法的類就是抽象類,需要使用MustInherit關鍵字修飾。
MustInherit Class Shape
MustOverride Function GetArea() As Double
End Class
Interface Color
Function GetColor() As String
End Interface
繼承
繼承基類和實作接口的聲明必須寫在類實作的前面。如果一個方法重寫了基類的版本,那麼這個方法應該使用Overrides關鍵字修飾。如果不希望類被其他類繼承,可以使用NotInheritable修飾,類似于Java的final關鍵字或者C#的sealed關鍵字。如果子類需要調用基類的方法,可以使用MyBase關鍵字代表基類。
Class Circle
Inherits Shape
Protected radius As Double
Public Sub New(r As Double)
radius = r
End Sub
Public Overrides Function GetArea() As Double
Return Math.PI*radius*radius
End Function
End Class
NotInheritable Class RedCircle
Inherits Circle
Implements Color
Public Sub New(r As Double)
MyBase.New(r)
End Sub
Public Function Color_GetColor() As String Implements Color.GetColor
Return "Red"
End Function
End Class
靜态成員
靜态成員和靜态函數使用Shared關鍵字聲明,對于每個類來說Shared成員隻會存在一個。
Class MyMath
Public Shared PI As Double = 3.1415926
Public Shared Function GetPI As Double
Return PI
End Function
End Class
子產品
Module類似于Class,不同之處在于Module不需要執行個體化,其中的函數可以直接調用,就像靜态函數一樣。
Module Program
Sub Main(args As String())
Console.WriteLine("Hello World!")
End Sub
End Module
異常處理
VB的異常處理和C#的一樣,都有Try、Catch、Finally部分。
Public Module ExceptionHandling
Sub HandleException()
Try
Throw New ArithmeticException("除數不能為零")
Catch ex As ArithmeticException
Console.WriteLine($"捕獲了數學計算異常:{ex.Message}")
Catch ex As Exception
Console.WriteLine($"捕獲了異常:{ex.Message}")
Finally
Console.WriteLine("終結代碼")
End Try
End Sub
End Module
以上就是VB語言的一些介紹了,希望對大家能有所幫助。