2012年7月15日星期日

TJS教學---function,函式(1)

(k ゚∀゚)<隨著我們寫的程式越來越大型,程式碼越來越多,我們有需要想辦法去將一個程式碼分割成多個部分,令程式碼的結構更有組織,這時我們可考慮使用函式(function)。

(k ゚∀゚)<函式是將一段程式碼獨立成一個個體,當我們需要時就可以呼叫它,函式有很多好處,其中一個就是函式可以重複呼叫,特別是一些經常重複的程式碼,我們只要寫一次就重複多次使用。

你說了那麼多,但我還是不太了解什麼是函式>( ゚ω゚ s)

(k ゚∀゚)<其實我們早就已經看過函式這種玩意,記不記得我們經常使用的System.inform(),實際上它算是函式,它可能花了一大段程式碼才執行到這效果,不過由於它被寫成了函式,我們只需要寫下短短的一行來呼叫它,取代這一大段的程式碼,同時我們就算不知道這函式是如何辦到這效果,我們亦可以毫無影響地使用它,這就是函式的好處。

(k ゚∀゚)<當然除了使用別人寫出來的函式,我們也要懂得如何撰寫函式,宣告函式的方式就像以下的模樣。

function 函式名稱(參數1,參數2,參數3,....){
  //函式主體
  return 回傳值;
}

看起來十分複雜……>( ゚ω゚ s)

(k ゚∀゚)<那麼看看以下的簡單範例。

function sum(x,y){
  return x+y;
}

(k ゚∀゚)<在上述的範例裡,我們宣告了一個叫sum的函式,它的目的只是簡單地把兩個數值相加,函式名稱的命名規則基本上跟變數的命名一樣,而這函式有兩個參數叫x和y,參數其實是區域變數(local variable),是一個只有函式才能「看得到」的變數,函式以外的地方是無法使用的,而當我們呼叫函式時必須給予參數一個值。

那麼sum(x,y)下面的東西是什麼?>( ゚ω゚ s)

(k ゚∀゚)<這是函式主體,也就是定義函式要做什麼的地方。

這句return是什麼來的,我從未看過這玩意。>( ゚ω゚ s)

(k ゚∀゚)<這句return是定義這函式會傳回來的值,我們稱之為回傳值(return value),函式會把這個值傳回來,return x+y即是將x+y的值回傳,留意一個函式可以接受多個參數,不過函式只會回傳一個回傳值。

我們宣告了這個叫sum的函式,但我怎樣才可使用它?>( ゚ω゚ s)

(k ゚∀゚)<嗯,就像以下的模樣。

var result=sum(2,3);
System.inform("2+3="+result);

function sum(x,y){
  return x+y;
}

(k ゚∀゚)<由於sum()有兩個參數,當我們呼叫sum()時,必須指定兩個值給這兩個參數,在上述的範例裡,我們將2和3傳給sum(),而這兩個值將x和y這兩個變數初始化,最後sum()將會回傳5這個值。

咦?為什麼函式在宣告前已經可以呼叫?平時如果變數在宣告前使用的話,不是會發生錯誤嗎?>( ゚ω゚ s)

(k ゚∀゚)<沒問題,當我們呼叫函式,吉里吉里會自行尋找宣告的位置,即使函式在宣告前被呼叫,也不會發生錯誤。

(k ゚∀゚)<而一個函式不一定有參數或回傳值,看看以下的範例。

function printHelloWorld(){
  System.inform("Hello World");
}

(k ゚∀゚)<當不需要用到參數或回傳值,我們可以忽略它們。

好像有點懂但又不太懂,好混亂……>( ゚ω゚ s)

(k ゚∀゚)<那麼不如你自己嘗試寫一寫,假如我製作一個函式,它接受一個參數n,我希望它回傳1+2+3+...+n的值,那我該怎樣寫?

唔……是不是這樣?>( ゚ω゚ s)

function sum(n){
  var result=0;
  for(var i=1;i<=n;i++){
    result+=i;
  }
  return result;
}

(k ゚∀゚)<是的,而當我們呼叫它時該怎樣寫?

是不是這樣?>( ゚ω゚ s)

System.inform(sum(10));

function sum(n){
  var result=0;
  for(var i=1;i<=n;i++){
    result+=i;
  }
  return result;
}

(k ゚∀゚)<不錯,就是這樣了。

我已經好混亂,可不可以不要再說。>( ゚ω゚ s)

(k ゚∀゚)<嗯,今次教的題目的確有點難,那關於函式的東西下次再繼續吧。

沒有留言:

發佈留言