另一個關於函式的新保留字是 return, 它的意思是就此結束這個函式,後面的指令都不再做。
繼續使用 collatz() 函式為例,我們在進行 Collatz 數列計算的時候, 先檢查輸入參數 x 是否符合假設:是一個正整數! 這種動作稱為『驗明輸入』input validation。
首先,我們檢查 x 是個「數」,也就是純量,而不是向量或矩陣。 方法是檢查 length(x):若 x 是向量或序列, 則 length(x) 是它的維度;若 x 是矩陣, 則 length(x) 是它的兩個維度中較長的那一個。 所以純量的特徵就是 length(x) 為 1。 如果 x 不是純量,顯示錯誤訊息 (寫在 Matlab 介面上), 並中斷函式。
把上述四句指令安插在 collatz.m 的 function 那一列宣告之後,並且在 n=0; 那一列之前。 存檔之後,如果執行if (length(x) > 1) disp(['Error: input must be a scalar.']); return; end
>> x=[1 2 3];就會得到錯續訊息 Error: input must be a scalar., 而 collatz() 之內尚未執行 n=0;, 所以在此情況下 collatz() 沒有傳回來任何答案; 可以說「答案」是「空集合」。
>> collatz(x)
接著檢查 x 是個整數,方法之一是檢查 floor(x) 是否與 x 相等。 如果不相等,表示 x 不是整數,那也該顯示錯誤訊息,並中斷函式。 此時仍然沒有答案。程式如下:
if (floor(x) ~= x) disp(['Error: input must be an integer.']); return; end
最後檢查 x 是個正整數。 函式如果執行到這裡,前面都沒有中斷, 表示 x 必定是個整數。因此,只要檢查它有沒有 > 0 就好:
if (x < 1) disp(['Error: input must be a positive integer.']); return; end
如果三段檢查都通過了,表示 x 已經被驗證為合法輸入, 然後就可以開始做 Collatz 數列計算。 整體而言,修改後的 collatz.m 如下:
function n = collatz(x) if (length(x) > 1) disp(['Error: input must be a scalar.']); return; end if (floor(x) ~= x) disp(['Error: input must be an integer.']); return; end if (x < 1) disp(['Error: input must be a positive integer.']); return; end n=0; while (x>1) & (n<1000) n = n+1; if (rem(x,2)) x = 3*x+1; else x = x/2; end end
習題