Arduino程式語言的setup()和loop()是「函式(function)」

我女兒學校的「生活科技」課程的期末測驗中,有一道Arduino程式的相關試題,她答錯了,題目大致像這樣:

底下程式中的setup()和loop()代表什麼?

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

答案:

  1. 主程式
  2. 副程式
  3. 其他:╴╴╴╴

BASIC語言的「主程式」和「副程式」

先說明一下,在一般的電腦概論中,程式碼裡面的主要程式稱作「主程式」;主程式以外,可重複使用的程式片段,叫做「副程式」。我接觸的第一個高階程式語言叫做BASIC(培基),底下範例包含主程式和副程式,早期的BASIC語言用「行號」標示程式敘述的位置,第100行是一段副程式,RETURN代表「回到主程式的下一行繼續執行」,GOSUB代表“go to subroutine”(跳到某一行開始的副程式):

BASIC程式

Pascal語言的「副程式」叫做function(函式)或procedure(程序)

我第二個學習的高階語言叫做Pascal,這是我在1991年時購買的參考書籍“Macintosh Pascal Programming Primer”,因為原文書很珍貴,所以我替它包了塑膠膜:

Macintosh Pascal Programming Primer

Pascal語言有function(函式)和procedure兩種「副程式」寫法。這本書的第28頁提到:“functions return values; procedures don’t.”(函式有傳回值;程序則沒有)。

functions return values; procedures don’t.

實際上,整本書裡面並沒有使用「副程式(subroutine或subprogram)」這種概括性的說法,都是稱作「函式(function)」或「程序(procedure)」。

這是我以前做的筆記,沒想到會在30年之後翻閱它;翻到自己以前寫的筆記,有時會覺得,哇勒…這小子怎麼那麼蠢…

Pascal語言

附帶一提,這本書的範例檔要額外購買。書本定價美金$24.95,需要範例程式磁碟片的話,要填寫書本末頁的表單,並附帶可在美國兌現的美金$30元支票寄給出版社(不收信用卡,美國以外地區加收運費美金$5元)。

程式原始碼磁碟

在那個年代,程式開發工具也不是免費的。

C和C++語言的函式

我第三個學習的高階程式語言是C,這是當年買的書本:

C程式語言

這是書本1-3頁對C語言的介紹:C語言寫成的程式是由函數(Function)與變數(Variable)構成的。我習慣把“function”稱作「函式」,以便跟數學函數區別。

C程式語言函式定義

回到文章開頭的問題,Arduino程式語言的本質是C++,Arduino語言的創造者建立了一些簡化程式開發的函式,例如:setup(), loop(), pinMode(),…等等,讓微電腦控制的初學者容易上手。

所以,Arduino程式裡的setup()和loop()是什麼?

  1. 主程式
  2. 副程式
  3. 其他:╴╴╴╴

嚴格來說,我覺得答案應該是「其他:函式」,但學校給的答案是「1. 主程式」。我跟女兒說,沒關係,那不過是名稱的定義,就好比台灣「滷肉飯」,有些店家寫「魯肉飯」,我們都知道那是什麼,好吃最重要 🙂

延伸閱讀

Posts created 469

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top