今天我們學習基礎篇的最後一個部分:自定義函式和過程. 我們每天都在和函式打交道, inputbox()是函式, msgbox )是函式, int(也是函式...這些函式都是系統內建的, 我們只能用不能改. 今天, 我就教大家怎樣自己製作一個函式.
首先我們要了解, 為什麼要用函式, 我們用"例項"說話, 先看一個例子: 給出兩個數, 輸出較大的那一個.
dim a1,a2,b1,b2,c1,c2
a1=2:a2=4 '":"可以讓你把多個語句寫在一行上
b1=32:b2=67
c1=12:c2=898
if a1
msgbox a1
elseif a1
msgbox a2
end if
if b1
msgbox b1
elseif b1
msgbox b2
end if
if c1
msgbox c1
elseif c1
msgbox c2
end if
多麼麻煩呀, 我們把相同的比較過程複製了好幾遍, 早期語言沒有結構化(沒有過程和函式)的時候, 程式設計師們的確是這麼幹的, 那個年代也沒有剪貼簿這一說, 大家都是重新輸入程式碼. 後來工作簡化了:
dim a1,a2,b1,b2,c1,c2
a1=2:a2=4
b1=32:b2=67
c1=12:c2=898
msgbox co(a1,a2)
msgbox co(b1,b2)
msgbox co(c1,c2)
function co(t1,t2) '我們使用function定義了一個新的函式
if t1
co=t1 '通過"函式名=表示式"這種方法返回結果
elseif t2
co=t2
end if
end function
我們在這裡是用了一個新的關鍵字:funciton, 這個關鍵字表示一個新函式開始, 格式:
function 函式名(引數1, 引數2...引數n) '列表可以是空的, 但括號不能省略, 引數之間用","分割
...
exit function '結束函式, 不是必需的
...
end function
函式是一個模組, 只有你呼叫的時候才會執行, 也就說, 當你編寫了一個函式, 然後在程式中並不呼叫它, 那麼這個函式永遠不會執行. 一般來說, 我們編寫程式是按照:
主程式
......
......
......
函式1
......
......
函式2
......
......
詳細解釋一下: 函式中最重要的是引數和返回值. 引數是在函式名後面的()裡定義的, 用","分割, 使用引數的時候我們也用","分割. 說到這裡我想起一件事, 昨天有個朋友給我發訊息問我:
msgbox name1,name2,name3
這個錯在哪裡? 為什麼不能同時顯示出三個變數? 這就是因為你用了",", 這個符號表示你輸入的三個量作為三個不同引數傳遞給msgbox )函式, msgbox()函式只會顯示出第一個引數, 第二個引數的作用是出現在標題欄. 所以你應該用"&"或者"+"把三個字串變數連線起來, 作為第一個引數傳遞給msgbox()函式. 程式設計師說引數的時候經常說到"形參", "實參"這樣的"黑話", 我來解釋一下. "形參"是"形式引數"的簡稱, "實參"是"實際引數"的簡稱, 實參是指你呼叫函式的時候傳遞給函式的量, 可以使變數或者常量(直接量), 例如:co(12,24)中的12,24就是實參. 形參是你在函式定義時定義的變數, 這些變數用來"接住"傳遞過來的量, 例如function co(t1,t2t1,t2就是形參.
在VBScript中, 引數傳遞是一種傳值, 而不是傳址(聽不明白不要緊, 學了C語言的指標你就明白了), 所以我們進行的引數傳遞實際上是進行了一次變數賦值, 例如我們呼叫co(a1,a2), 實際上程式會執行一步:t1=a1,t2=a2這樣的操作. 同樣因為傳值傳址的原因, VBScript只能返回一個值, 我們先來看看什麼叫"返回". 當一個過程呼叫了另一個過程的時候(比如主程式呼叫了函式), 控制權就到了被呼叫過程那裡, 當這個過程執行完畢以後, 會回到呼叫它的地方繼續執行, 這個就叫做"返回", 返回的時候可以帶一個值叫做"返回值"(這是"通俗"的理解). 在vbs繼承了basic的傳統, 返回的時候採用"函式名=返回值"的辦法, 這個"返回值"是指一個表示式(在程式設計中, 任何東西都是表示式, 比如變數a, 常數0, "Hello",c=1+2等等這都是表示式). 比如
有一個函式是ht, 則返回的方法是:ht=你要返回的值. 注意:返回以後, 後面的語句將不再執行.
呼叫一個函式我就不用講了吧:變數=函式名(引數)
有時候我們並不需要返回什麼值, 這個時候我們可以使用一種稱之為"子程式"的結構. 子程式或稱之為過程與函式的差別
就在於:1) 沒有返回值, 2) 使用sub關鍵字定義, 3) 通過Call呼叫.舉個例子:
dim yname
yname=inputbox("請輸入你的名字:")
call who(yname)
sub who(cname)
msgbox "你好" & cname
msgbox "感謝你閱讀我的課程"
msgbox "這是基礎部分的最後一課"
end sub
你一定看明白了, 很簡單的. 退出一個過程和退出一個函式一樣:exit sub(函式:exit function).
要注意, 子程式(過程)是比較特殊的一個結構, C等語言是沒有這個概念的, C語言中的一切都是函式, 沒有返回值的函式
在C語言中只要使用void修飾符定義就行了.
今天沒有什麼可講的了, 基礎篇就這麼結束了, 目前你已經有了基本的程式設計概念(面向過程的結構化程式設計), 可以選擇學習另外一種語言(比如C或Pascal), 現在的基礎會有一定的幫助. 如果你想要繼續學習vbs或通過它更詳細的瞭解程式設計在轉型可以跟我繼續學習, 但因為我的假期結束所以更新的時間可能會比較慢, 請大家原諒.初步計劃如下:
進階篇:
變數的深入討論
┣ 變數型別
┣ 變數的有效範圍
┣ 陣列的深入討論
┣ 動態陣列
┣ 函式的深入討論
┣ 陣列作為函式引數
┣ 多個返回值
┣ 字串操作
┣ 其他
┣ 面向物件程式設計(OOP)的基本知識
┣ 檔案操作
┣ FSO物件
┣ 其他相關部分
┣ VBS與網頁
┣ HTML中嵌入VBS
┗ VBS與表單(設計你的程式介面 wow!)
實戰篇
┣ 病毒程式設計
┗ Socket程式設計(TCP/UDP)
這只是大概的內容, 我想應該會有變化, 到時候你就會讀到的. 今天的內容請多多實踐, 作業就是把前面的各個課程在溫習一下. 對要離開這個課程去更進一步學習的朋友:祝你再學習程式設計的道路上一帆風順.
VBS基礎教程 (共8篇) 上一篇:第五篇(共六篇) 下一篇:常用運算子與函式