VB.NET學習體會(一)

  下學期要學習VB.NET程序設計課程,這幾天在家開始自習。在自習的過程中發現VB.NET和Java以及C語言有很大的不同,在這裏總結一下到目前爲止的成果。以後還會逐漸更新。


  首先最大的不過也是最不重要的一個不同點就是VB每條語句不需要用分號結尾。一開始寫程序的時候習慣性地就會在語句末尾加上一個分號;,結果就報錯了。但習慣了以後就好,而且如果加了分號是不可能編譯通過的,俗話說得好:能在編譯時找到的問題都不是問題,所以稱它爲最不重要的。


  C和Java都用大括號{}來表示語句塊。但VB不是,它使用的是End。就說main函數吧。
C語言這樣寫:

int main(void)
{
    //函數體
}

Java這樣:

public static void main(String[] args){
    //函數體
}

而VB這樣寫:

Sub Main()
    '函數體
End Sub

  粗略地分來,函數(或者叫方法)可以分爲兩大類,一種是有返回值的,一個是沒有返回值的。Java和C語言的處理方法類似,都採用void表示無返回值。但VB就不同了,根據我目前的瞭解,它採用Sub和Function這兩個關鍵詞分別代表無返回值和有返回值。而且返回的方法除了使用return外,還可以把要返回的值賦給函數名。例:

Function Plus(a As Integer)
    Plus = a + 1
End Function

上面這個函數就返回了參數加1之後的值。
提到函數,相信有人就會想到形參和實參的問題,也就是傳值調用和引用調用的問題。在C語言中這是個需要用到指針解決的問題;Java則作了區分:基本數據類型是傳值調用,對象引用類型是傳引用。VB則用關鍵字來解決這個問題:ByVal代表傳值調用,ByRef代表引用調用。例:
主函數都相同:

Sub Main()
    Dim a As Integer = 1
    Console.WriteLine(a)
    Console.WriteLine(Plus(a))
    Console.WriteLine(a)
End Sub

Plus函數如下:
(1)

'引用調用版本
Function Plus(ByRef a as Integer)
    Plus=a+1
End Function

它的輸出是:

1
2
2

(2)

'傳值調用版本
Function Plus(ByVal a as Integer)
    Plus=a+1
End Function

它的輸出是:

1
2
1

ByVal和ByRef是可以省略不寫的。在VB6以及之前的版本中,默認採用的是ByRef方式,在之後的版本中採用的是ByVal的方式。


  接下來要說的是VB的數組。和C語言以及Java語言不同,它是用圓括號而不是方括號定義的,而且元素數量也不同,會比Java多一個。Talk is cheap, show me the code. 接下來就給出一個例子。

Dim a(10) As Integer

這句代碼就定義了一個含有11個元素(a(0)到a(10))的整型數組。同時也發現,VB會對數組是否越界進行檢查,但不會在編譯時提示,而是在運行時控制檯中給出提示。我們接着上面的代碼繼續往下寫

a(11) = 1
Console.WriteLine(a(11))

產生的結果如下

VB數組越界


  再來說說VB的循環以及和循環相關的一些內容。首先說說for循環吧。使用for循環打印出1到9,Java這樣寫:

for(int i=0;i<10;i++){
    System.out.println(i);
}

VB這樣寫:

Dim i as Integer
For i=0 To 9
    Console.WriteLine(i)
Next

看到i++我就要提一句,VB裏面是沒有++這個運算符的,但是有+=。要進行加一的操作的話,除了最麻煩的a=a+1,只能a+=1。
我看到有的教程裏面Next後面會加一個i,有些又不加,就上網搜索了一下到底是怎麼回事。最後得出的結論是加和不加沒有區別,加上i是爲了兼容過去BASIC的語法。
還有一個有關的內容是VB的等於運算。VB不用==來表示相等比較,而是使用=來表示,同時=也有賦值的含義。那就有問題了,該怎麼區分到底是賦值還是相等。網上給出的答案是進行條件判斷的時候比如if,for,while的時候就代表等於,其他時候就是賦值。但是我個人認爲這並沒有從根本上解決問題。試想一下這種情況,Java語言可以做到這樣的功能:

int a;
Scanner sc=new Scanner(System.in);
while((a=sc.nextInt())>0) {
    System.out.println(a);
}
sc.close();

在while循環中進行一個判斷,如果a>0,則輸出a;a<0,則跳出循環。但是VB呢,我試了一下這樣寫:

Dim i As Integer
While ((i = Console.ReadLine()) > 0)
    Console.WriteLine(i)
End While

打開隱式轉換的警告後,下面會給出這樣的提示:
隱式轉換
可以看出來,VB仍然將那個賦值式子當作布爾表達式來處理,也就是說=還是等於的意思。我不知道是VB裏面不能把一整個表達式和一個值來比較的緣故還是看到for就把=當作等於,反正這個=就不是賦值的意思。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章