注:本文寫於2018年01月28日,首先發表於CSDN博客「aopstudio的博客」上java
下學期要學習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外,還能夠把要返回的值賦給函數名。例:code
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函數以下:blog
(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的循環以及和循環相關的一些內容。首先說說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就把=看成等於,反正這個=就不是賦值的意思。