1 00:00:00,981 --> 00:00:05,578 我們又回到用函數 來畫4個溫斯頓的程式了 2 00:00:05,578 --> 00:00:06,916 我修改了一下 3 00:00:06,916 --> 00:00:09,236 以便顯示溫斯頓不同人生階段的年紀 4 00:00:09,236 --> 00:00:11,377 你等一下就會明白 5 00:00:11,377 --> 00:00:13,549 我要告訴你一件關於溫斯頓的事: 6 00:00:13,549 --> 00:00:15,901 溫斯頓愛死甜甜圈了 7 00:00:15,901 --> 00:00:18,437 他每天吃3個 8 00:00:18,437 --> 00:00:21,653 難怪一張臉又大又黃 9 00:00:21,653 --> 00:00:25,311 為了提醒他 甜甜圈對身體不好 10 00:00:25,311 --> 00:00:26,983 我想修改一下程式 11 00:00:26,983 --> 00:00:31,755 以便顯示於每個年紀 他累計吃下多少甜甜圈 12 00:00:32,095 --> 00:00:35,763 例如,他2歲時 13 00:00:35,763 --> 00:00:41,598 他共吃了3﹡365﹡2 14 00:00:41,598 --> 00:00:45,873 1天3個,1年365天,2年 15 00:00:45,873 --> 00:00:49,640 讓數量顯示在標頭下 16 00:00:49,640 --> 00:00:51,515 哇!2千個甜甜圈 17 00:00:51,515 --> 00:00:54,155 對2歲娃來說太多了 18 00:00:54,155 --> 00:00:56,812 現在他14歲 19 00:00:56,812 --> 00:01:04,032 他吃了 3﹡365﹡14 20 00:01:04,032 --> 00:01:07,636 共吃了1萬5千個甜甜圈 21 00:01:08,446 --> 00:01:13,050 我一直這樣算也行 但我開始發現一個規律 22 00:01:13,050 --> 00:01:16,718 我正在重複我的運算 23 00:01:16,718 --> 00:01:20,316 而我只改變其中的一樣東西:年數 24 00:01:20,316 --> 00:01:22,872 每當我看到像這樣重複的程式碼 25 00:01:22,872 --> 00:01:28,228 我便想:「嗯,這能否寫成函數?」 26 00:01:28,228 --> 00:01:30,465 對,我們絕對可以的 27 00:01:30,465 --> 00:01:32,795 我們動手吧 28 00:01:32,795 --> 00:01:34,416 我在這裡定義函數 29 00:01:34,416 --> 00:01:40,937 叫它做 calcTotalDonuts = function 30 00:01:40,937 --> 00:01:44,228 裡面只有一個參數,年數 31 00:01:44,228 --> 00:01:49,312 因為那是我們每次做這計算時 唯一變動的東西 32 00:01:49,316 --> 00:01:52,878 程式裡面,我們做計算 33 00:01:52,878 --> 00:02:01,490 將它存為變數 也就是 3﹡365﹡numYears 34 00:02:01,490 --> 00:02:03,150 我們現在有了這函數 35 00:02:03,150 --> 00:02:08,639 我將利用 calcTotalDonuts 去取代在這裏的表示式 36 00:02:08,639 --> 00:02:12,828 以便召喚程式,及傳遞數值 2 37 00:02:12,828 --> 00:02:16,997 好,現在我們看不到任何總數 38 00:02:16,997 --> 00:02:18,962 嗯,怎麼了呢? 39 00:02:19,392 --> 00:02:22,152 我們的函式確實計算了總數 40 00:02:22,152 --> 00:02:23,096 在這 41 00:02:23,096 --> 00:02:26,060 但它沒有告知任何人那總數 42 00:02:26,060 --> 00:02:30,247 好比學校老師點你回答問題 43 00:02:30,247 --> 00:02:31,704 而你只在腦中回答 44 00:02:31,704 --> 00:02:33,652 因爲你太害羞去講出答案 45 00:02:33,652 --> 00:02:37,378 你有答案,但老師永遠不會知道 46 00:02:37,378 --> 00:02:41,089 如果我們想函數 傳某值給召喚它的人 47 00:02:41,089 --> 00:02:45,710 函數就要寫明去回傳 (return) 那值 48 00:02:45,710 --> 00:02:49,599 要函數回傳一個值 我們須輸入 return 49 00:02:49,599 --> 00:02:51,278 不管它想回傳什麼 50 00:02:51,278 --> 00:02:55,138 可以是變數、數值或表示式 51 00:02:55,138 --> 00:02:57,749 這裡我們指明 return totalDonuts 52 00:02:57,749 --> 00:03:01,870 所以誰召喚此函數 誰就會得到這回答 53 00:03:01,880 --> 00:03:04,791 總計顯示出來了, 耶! 54 00:03:04,791 --> 00:03:06,651 這裡我們可簡化函數 55 00:03:06,651 --> 00:03:08,341 不必儲存成變數 56 00:03:08,341 --> 00:03:10,051 只需把整個表示式 57 00:03:10,051 --> 00:03:13,608 寫在 return 裡 函數就變成一行 58 00:03:13,608 --> 00:03:14,408 好 59 00:03:15,078 --> 00:03:17,956 現在我們可以來回顧和計算 60 00:03:17,956 --> 00:03:20,364 每個年紀吃下的甜甜圈總量 61 00:03:20,364 --> 00:03:24,262 就是召喚這函數 傳遞年數 62 00:03:24,262 --> 00:03:28,704 嗯,這裡是 calcTotalDonuts(25) 63 00:03:28,704 --> 00:03:36,036 位置沒錯 calcTotalDonuts(65) 64 00:03:36,366 --> 00:03:40,241 好!哇!如果他吃到65歲 65 00:03:40,241 --> 00:03:45,146 他將吃下7萬個甜甜圈 那真是超多甜甜圈 66 00:03:45,146 --> 00:03:48,051 我不覺得溫斯頓能辦到(笑) 67 00:03:48,051 --> 00:03:50,331 不過現在我們寫了這函數 68 00:03:50,331 --> 00:03:53,191 做些小調整並不難 69 00:03:53,191 --> 00:03:55,138 好比溫斯頓看到這結果 70 00:03:55,138 --> 00:03:58,865 說: 「噢!這太多了 如果我1天只吃1個?」 71 00:03:58,865 --> 00:04:02,752 那我們可以來到這 修改這一個數字 72 00:04:02,752 --> 00:04:04,329 所有都改好了 73 00:04:04,329 --> 00:04:07,021 2萬3千個,還是很多 74 00:04:07,021 --> 00:04:10,493 也許溫斯頓說: 「好吧好吧!如果我1週吃1個呢?」 75 00:04:10,493 --> 00:04:12,477 嗯,這比較合理 76 00:04:12,477 --> 00:04:15,025 那我們改 365 為 50 77 00:04:15,025 --> 00:04:17,523 因為一年有50週,對吧? 78 00:04:18,103 --> 00:04:22,802 好,看來好多了,是吧? 3千個,那蠻合理的 79 00:04:22,802 --> 00:04:27,031 所以你看,運用函數和數值回傳 80 00:04:27,031 --> 00:04:30,871 我們能保存程式碼,亦能保護生命