函式宣告

將程式碼分割成多個函式區塊可以讓程式設計師更容易將程式碼模組化,程式設計師可以將任務還有回傳值定義在一個函式區塊中,再讓其他程式來 ”呼叫” 它們。傳統的用法是,當在程式碼內需要多次某種相同動作時就創建一個函式。

給習慣用 BASIC 的程式設計師,在 86Duino 中的函式提供 (還有擴充) 了一些子程式 (BASIC 中的 GOSUB)。

將程式碼分割成函式具有下列幾個優點:

  • 函式讓程式碼本身更具組織性,也讓程式碼變的較概念化。
  • 函式讓一個動作被撰寫在一個地方,所以這個函式只需要思考與除錯一次就可以了。
  • 這也減少在修改程式碼過程中發生錯誤的機率。
  • 函式讓整個程式碼變的比較小且緊密,因為再利用率變高了。
  • 這樣讓再次利用別的程式碼變得更容易也更模組化,副作用更少,還有可讀性變更好。

setup()loop() 是 Aruino 及 86Duino 必備的兩個函式,其他的函式必須創建在這兩個函式之外。舉個例子,我們建立一個簡單的函式去將兩個數字相乘。

範例

FuncAnatomy

“呼叫” 一個簡單的乘法函式,我們傳給它預想中的資料形態參數:

void loop{
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k 的數值現在是 6
}

函式需要被宣告在任何的函式之外,因此 “myMultiplyFunction()” 要被宣告在 ”loop()” 上面或者下面。

整個程式碼會像這樣:

void setup(){
  Serial.begin(9600);
}

void loop() {
  int i = 2;
  int j = 3;
  int k;

  k = myMultiplyFunction(i, j); // k 的數值現在是 6
  Serial.println(k);
  delay(500);
}

int myMultiplyFunction(int x, int y){
  int result;
  result = x * y;
  return result;
}

其他範例

這個函式會藉由 analogRead() 讀取一個感測器五次並且計算五次讀取值的平均。它把資料限制在 8 bit 之中 (0 到 255),並回傳計算後的結果。

int ReadSens_and_Condition(){
  int i;
  int sval = 0;

  for (i = 0; i < 5; i++){
    sval = sval + analogRead(0);    // 感測器在類比 pin 0
  }

  sval = sval / 5;    // 平均
  sval = sval / 4;    // 限制在 8 bit 中 (0 ~ 255)
  sval = 255 - sval;  // 轉換輸出
  return sval;
}

呼叫我們的函式只需要指派一個變數給它。

int sens;

sens = ReadSens_and_Condition();

語法參考主頁面

本頁由熱血青年 LBU 譯自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.