0:00:01.120,0:00:04.703 現在讓我們談談這段時間[br]你們一直在使用的東西: 0:00:04.703,0:00:05.760 函數 0:00:05.760,0:00:09.746 每當你使用指令時,像是[br]rect() 或 fill() 或 text() 0:00:09.746,0:00:11.585 你就在召喚函數 0:00:11.585,0:00:14.839 而那些函數依照你的指令去繪圖 0:00:14.839,0:00:16.320 函數到底是什麼? 0:00:16.320,0:00:19.870 它是一連串我們集合起來[br]並給予名稱的程式碼 0:00:19.870,0:00:23.768 因為我們想能夠多次地[br]重複使用哪一點功能 0:00:23.768,0:00:26.322 想一想 rect()[br]rect() 做的是什麼? 0:00:26.322,0:00:28.612 它畫出四條線,對吧? 0:00:28.612,0:00:31.513 我們也可用 line() 函數[br]做出相同的,是吧? 0:00:31.513,0:00:34.044 而我們也能得到一個貌似矩形的繪圖 0:00:34.044,0:00:36.113 但是我們發現 0:00:36.113,0:00:39.357 我們也想能夠多次繪畫矩形 0:00:39.357,0:00:43.050 如果每次都要計算怎麼[br]從一個角落畫直線到另一個角落 0:00:43.050,0:00:45.493 再從一個角落到另一個角落[br]就會變得很惱人 0:00:45.493,0:00:48.083 與其那樣[br]我們不如寫一個 rect() 函數 0:00:48.083,0:00:50.673 而該函數做的正正就是這 0:00:50.673,0:00:54.565 跟那四行編碼做的一模一樣[br]只是所需的碼少很多 0:00:54.975,0:00:56.975 那還蠻酷的 0:00:56.975,0:01:02.271 而 rect() 是其中一個在可汗學院[br]所有學習課程中都可使用的函數 0:01:02.271,0:01:07.719 但是,你也可以在你的程式裏[br]寫自己的函數 0:01:07.719,0:01:10.479 例如:我們設計一個程式 0:01:10.479,0:01:13.979 讓我們能多次繪製溫斯頓 0:01:13.979,0:01:16.802 說不定說個有關他的生命故事 0:01:16.802,0:01:20.155 然後展示出他人生裏的[br]每個年齡階段 0:01:20.155,0:01:24.245 所以我們的溫斯頓繪製碼是可能是這樣: 0:01:24.245,0:01:26.995 我們有 faceX 和 faceY 變數 0:01:26.995,0:01:28.555 來儲存臉的中心位置 0:01:28.555,0:01:30.257 然後我們畫上眼和嘴 0:01:30.257,0:01:32.597 相對著那些變數 0:01:32.597,0:01:34.717 現在程式可以看到編碼 0:01:34.717,0:01:37.687 它不是在任何函數中[br]所以會直接執行 0:01:37.687,0:01:39.905 而且只執行一次 0:01:39.905,0:01:43.467 好的,把它變成一個函數 0:01:43.467,0:01:47.554 這一步很似我們宣告變數的步驟 0:01:47.554,0:01:49.136 因為其實那正是我們在做的 0:01:49.136,0:01:52.055 所以我們寫 var drawWinston 0:01:52.055,0:01:54.340 幫它取個好名字,高描述性 0:01:54.340,0:01:55.711 然後一個 =[br] 0:01:55.711,0:01:59.131 但在這,我們不寫一個數字或一個字串 0:01:59.131,0:02:02.904 而直接寫 function [br]確定你拼對 0:02:02.904,0:02:06.053 之後一個空白括號 () 0:02:06.053,0:02:08.183 然後一個開花括號 { 0:02:08.183,0:02:09.723 再一個關花括號 } 0:02:09.723,0:02:11.261 和最後的分號 ; 0:02:11.261,0:02:15.395 很好,我們需要做的是[br]將我們想要的所有東西 0:02:15.395,0:02:18.772 放進函數的開和關花括號之間 0:02:18.772,0:02:21.651 我們就把所有編碼放進去 0:02:21.651,0:02:25.713 放它進我們的函數裏 [br]排好內縮,然後 0:02:25.713,0:02:26.703 噔噔! 0:02:26.703,0:02:28.783 現在我們有的便是這變數 0:02:28.783,0:02:30.337 它存着一個函數[br] 0:02:30.337,0:02:34.113 也就是說我們給了[br]這編碼區塊一個標籤 0:02:34.113,0:02:36.616 以便我們於任何時間告訴我們的程式: 0:02:36.616,0:02:40.816 嘿!找出那個有標籤的[br]編碼區塊然後執行它! 0:02:40.816,0:02:43.524 我們正令這編碼變得可再用 0:02:43.524,0:02:46.394 但注意,我們現在沒有任何溫斯頓! 0:02:46.394,0:02:48.999 我們丟了溫斯頓![br]他跑了去哪裡? 0:02:48.999,0:02:52.920 好的,當我們放這於函數裏 0:02:52.920,0:02:55.630 我們便告訴了程式:[br]嘿,這裡有一堆程式碼 0:02:55.630,0:02:57.840 我想稍後能夠執行 0:02:57.840,0:03:00.579 但只當我叫你去執行時才動手 0:03:00.579,0:03:03.769 我們需告訴它去執行程式碼 0:03:03.769,0:03:06.364 就是指我們需召喚函數 0:03:06.364,0:03:09.464 就如我們執行ellipse() 和 [br]rect() 和 line() 時一樣 0:03:09.464,0:03:13.718 我們寫下函數名稱 [br]drawWinston 0:03:13.718,0:03:16.037 隨後接上一個括號 () 0:03:16.037,0:03:18.397 當然還有分號 ; 0:03:18.397,0:03:19.259 噔噔! 0:03:19.259,0:03:20.911 我們有個溫斯頓了! 0:03:20.911,0:03:23.830 好,我覺得它很酷[br]但你可能不覺它很酷 0:03:23.830,0:03:28.578 因為我們做的一切[br]就是程式做它之前就會做的 0:03:28.578,0:03:29.948 有點好笑吧? 0:03:29.948,0:03:32.661 函數的用意就在於重複使用 0:03:32.661,0:03:34.598 現在就來試試 0:03:34.598,0:03:37.588 我們可以復製貼上這函數召喚 0:03:37.588,0:03:40.894 噔噔!噔噔![br]一遍又一遍地 0:03:40.894,0:03:44.304 嗯,但看起來好像一樣 0:03:44.304,0:03:45.862 喔,成功了 0:03:46.402,0:03:48.082 它繪出了許多溫斯頓 0:03:48.082,0:03:50.965 但問題是它們全在同一個地方 0:03:50.965,0:03:53.895 如果我們有X光眼的話[br]就是可以看穿畫布 0:03:53.895,0:03:55.552 看見三個溫斯頓 0:03:56.402,0:04:00.352 但我沒有X光眼 [br](我不知道你) 0:04:00.352,0:04:03.164 但是,我們可以對函數[br]做一些小小的改變 0:04:03.164,0:04:04.585 讓它現身 0:04:04.585,0:04:08.752 你看 faceX 和 faceY [br]它們永遠都是202 和 208 0:04:08.752,0:04:11.661 我們可利用[br]函數 random() 來改變這 0:04:11.661,0:04:14.491 要不 random() 從 50 到 350 0:04:14.491,0:04:16.764 它便會隨機產生一個[br]於那兩數之間的數字 0:04:16.764,0:04:18.943 我們可以在這做一樣的 0:04:18.943,0:04:21.503 所以每當這函式被召喚時 0:04:21.503,0:04:23.423 它便會產生這新的隨機數 0:04:23.423,0:04:26.689 如果我們按 restart[br]我們便可得到隨機溫斯頓 0:04:26.689,0:04:28.423 太厲害了! 0:04:29.863,0:04:31.472 好,我覺得這很酷因爲[br] 0:04:31.472,0:04:34.717 如果我們沒有擺它在函式裏[br]原本該需要一大堆編碼來寫這 0:04:34.717,0:04:37.328 本來會有三倍的程式碼 0:04:38.358,0:04:40.779 不過目前仍然不是它用處的極致 0:04:40.779,0:04:43.425 因爲我們大概不想要隨機溫斯頓 0:04:43.425,0:04:46.904 我們也許想能夠放將溫斯頓[br]在螢幕上一個固定的地方 0:04:46.904,0:04:47.900 所以請密切留意 0:04:47.900,0:04:51.531 因爲我們將講解[br]如何傳遞參數給函數 0:04:51.531,0:04:54.380 而你便能學會做那