張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室 第23章 程式碼的重複使用 張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室
本章大綱 大綱 本章介紹 WSH 的函數,以及函數定義檔的使用。JavaScript 函數定義檔可用於客戶端的網頁、伺服器端的 ASP、本機的WSH,這可說是 JavaScript 語言一大優勢。 主題 23-1:函數 23-2:函數定義檔的使用
23-1 :函數 本小節將說明函數的使用。
使用函數的目的 對於任何程式語言來說,若要能建立大型應用程式,程式碼就要模組化(Modularized)以便提高其重複使用度(Reusability)。 因此在撰寫 WSH 的程式碼時,應該注意程式碼的重複性,並設法將重複出現的部分寫成函數(或稱函式),以便重複使用。
範例23-1 主題:使用函數 sum() 來算出由 1 加到 n 的總和 執行結果 檢視原始碼 程式碼重點: 說明: 執行結果 檢視原始碼 程式碼重點: 說明: 執行後所顯示結果: 1+2+...+40 = 820 function sum(n) { var i, total=0; for (i=1; i<=n; i++) total = total + i; return(total); } n = 40; WScript.Echo("1+2+...+" + n + " = " + sum(n) + "\n");
範例23-2 主題:先呼叫此函數,然後再定義函數 執行結果 檢視原始碼 程式碼重點: 說明: 將函數定義調到主程式之後,執行的結果相同。 執行結果 檢視原始碼 程式碼重點: 說明: 將函數定義調到主程式之後,執行的結果相同。 n = 40; WScript.Echo("1+2+...+" + n + " = " + sum(n) + "\n"); function sum(n) { var i, total=0; for (i=1; i<=n; i++) total = total + i; return(total); }
範例23-3 主題:相同功能的函數,改用 VBScript 來撰寫 執行結果 檢視原始碼 程式碼重點: 說明: 執行後所得到的結果是一樣的。 執行結果 檢視原始碼 程式碼重點: 說明: 執行後所得到的結果是一樣的。 同樣的,在使用 VBScript 於 WSH 時,也可將函數的定義放到後面,得到的結果也會相同。 function sum(n) dim i, total total = 0 for i = 1 to n total = total + i next sum = total end function n = 40 WScript.Echo("1+2+...+" & n & " = " & sum(n) & chr(13) & chr(10))
23-2 :函數定義檔的使用 本小節將說明如何使用函數定義檔。
如何使用函數定義檔 我們可以將常用的函式,放在一個函式定義檔內,再從其他程式中,加入此檔案,就可以使用此函式定義檔中所定義的函式。 WSH 所用的函式檔案,可以具有任何附檔名,但我們通常將此類函式檔案的附檔名設定為 fun(這是個人的習慣,你也可以選用不同的附檔名),以資區別。
sumFunction.fun 用途:計算由1到n的總和的函式 程式碼重點: 說明: 我們可以將計算由1到n的總和的函式sum(),放在 sumFunction.fun function sum(n) { var i, total=0; for (i=1; i<=n; i++) total = total + i; return(total); }
範例23-4 主題:以插入來源的方式導入函式定義檔 執行結果 檢視原始碼 檢視sumFunction.fun 程式碼重點: 說明: 若要呼叫此檔案所定義的函式,通常必須將主程式的附檔名改為 wsf,並使用下述方式來導入函式定義檔: <script src="sumFunction.fun"> <job> <script src="sumFunction.fun"></script> <script> WScript.Echo("1+2+...+" + n + " = " + sum(n)); </script> </job>
範例23-5 (1) 主題:在不同的程式語言呼叫同一個函式庫 執行結果 檢視原始碼 程式碼重點 說明: 執行結果 檢視原始碼 程式碼重點 說明: 我們使用 JScript 和 VBScript 來呼叫同一個(由 JScript 來撰寫的)函數,執行後可得到同樣的結果,顯示如下: 1+2+...+40 = 820 (via Jscript) 1+2+...+40 = 820 (via VBScript) <job> <script src="sumFunction.fun"></script> <script language=jscript>…</script> <script language=vbscript>…</script> </job>
範例23-5 (2) 我們可以使用同樣一個函數定義檔於客戶端的 JavaScript(用於網頁)、伺服器端的 JScript(用於 ASP)、本機的 JScript(用於 WSH)。 假設我們要導入函數定義檔 file.fun,則在上述三種環境下所用的導入指令列出如下: Client-side JavaScript(in HTML) <script src="file.fun"></script> 相關說明可見本書第 5 章。 Server-side JScript(in ASP) <script language=jscript runat=server src="file.fun"> 相關說明可見本書第 13 章。(請注意:這裡不能省略 language 的標籤!) Standalone JScript(in WSH)