0:00:00.981,0:00:05.578 我們又回到用函數[br]來畫4個溫斯頓的程式了 0:00:05.578,0:00:06.916 我修改了一下[br] 0:00:06.916,0:00:09.236 以便顯示溫斯頓不同人生階段的年紀 0:00:09.236,0:00:11.377 你等一下就會明白 0:00:11.377,0:00:13.549 我要告訴你一件關於溫斯頓的事: 0:00:13.549,0:00:15.901 溫斯頓愛死甜甜圈了 0:00:15.901,0:00:18.437 他每天吃3個 0:00:18.437,0:00:21.653 難怪一張臉又大又黃 0:00:21.653,0:00:25.311 為了提醒他[br]甜甜圈對身體不好 0:00:25.311,0:00:26.983 我想修改一下程式[br] 0:00:26.983,0:00:31.755 以便顯示於每個年紀[br]他累計吃下多少甜甜圈 0:00:32.095,0:00:35.763 例如,他2歲時 0:00:35.763,0:00:41.598 他共吃了3﹡365﹡2 0:00:41.598,0:00:45.873 1天3個,1年365天,2年 0:00:45.873,0:00:49.640 讓數量顯示在標頭下 0:00:49.640,0:00:51.515 哇!2千個甜甜圈 0:00:51.515,0:00:54.155 對2歲娃來說太多了 0:00:54.155,0:00:56.812 現在他14歲 0:00:56.812,0:01:04.032 他吃了 3﹡365﹡14 0:01:04.032,0:01:07.636 共吃了1萬5千個甜甜圈 0:01:08.446,0:01:13.050 我一直這樣算也行[br]但我開始發現一個規律 0:01:13.050,0:01:16.718 我正在重複我的運算 0:01:16.718,0:01:20.316 而我只改變其中的一樣東西:年數 0:01:20.316,0:01:22.872 每當我看到像這樣重複的程式碼 0:01:22.872,0:01:28.228 我便想:「嗯,這能否寫成函數?」 0:01:28.228,0:01:30.465 對,我們絕對可以的[br] 0:01:30.465,0:01:32.795 我們動手吧 0:01:32.795,0:01:34.416 我在這裡定義函數 0:01:34.416,0:01:40.937 叫它做 calcTotalDonuts = function 0:01:40.937,0:01:44.228 裡面只有一個參數,年數 0:01:44.228,0:01:49.312 因為那是我們每次做這計算時[br]唯一變動的東西 0:01:49.316,0:01:52.878 程式裡面,我們做計算 0:01:52.878,0:02:01.490 將它存為變數[br]也就是 3﹡365﹡numYears 0:02:01.490,0:02:03.150 我們現在有了這函數 0:02:03.150,0:02:08.639 我將利用 calcTotalDonuts[br]去取代在這裏的表示式 0:02:08.639,0:02:12.828 以便召喚程式,及傳遞數值 2 0:02:12.828,0:02:16.997 好,現在我們看不到任何總數 0:02:16.997,0:02:18.962 嗯,怎麼了呢? 0:02:19.392,0:02:22.152 我們的函式確實計算了總數 0:02:22.152,0:02:23.096 在這 0:02:23.096,0:02:26.060 但它沒有告知任何人那總數 0:02:26.060,0:02:30.247 好比學校老師點你回答問題 0:02:30.247,0:02:31.704 而你只在腦中回答 0:02:31.704,0:02:33.652 因爲你太害羞去講出答案 0:02:33.652,0:02:37.378 你有答案,但老師永遠不會知道 0:02:37.378,0:02:41.089 如果我們想函數[br]傳某值給召喚它的人 0:02:41.089,0:02:45.710 函數就要寫明去回傳 (return) 那值 0:02:45.710,0:02:49.599 要函數回傳一個值 [br]我們須輸入 return 0:02:49.599,0:02:51.278 不管它想回傳什麼 0:02:51.278,0:02:55.138 可以是變數、數值或表示式 0:02:55.138,0:02:57.749 這裡我們指明[br]return totalDonuts 0:02:57.749,0:03:01.870 所以誰召喚此函數[br]誰就會得到這回答 0:03:01.880,0:03:04.791 總計顯示出來了, 耶! 0:03:04.791,0:03:06.651 這裡我們可簡化函數 0:03:06.651,0:03:08.341 不必儲存成變數 0:03:08.341,0:03:10.051 只需把整個表示式 0:03:10.051,0:03:13.608 寫在 return 裡[br]函數就變成一行 0:03:13.608,0:03:14.408 好 0:03:15.078,0:03:17.956 現在我們可以來回顧和計算 0:03:17.956,0:03:20.364 每個年紀吃下的甜甜圈總量 0:03:20.364,0:03:24.262 就是召喚這函數[br]傳遞年數 0:03:24.262,0:03:28.704 嗯,這裡是 calcTotalDonuts(25) 0:03:28.704,0:03:36.036 位置沒錯 calcTotalDonuts(65) 0:03:36.366,0:03:40.241 好!哇!如果他吃到65歲 0:03:40.241,0:03:45.146 他將吃下7萬個甜甜圈[br]那真是超多甜甜圈 0:03:45.146,0:03:48.051 我不覺得溫斯頓能辦到(笑) 0:03:48.051,0:03:50.331 不過現在我們寫了這函數 0:03:50.331,0:03:53.191 做些小調整並不難 0:03:53.191,0:03:55.138 好比溫斯頓看到這結果 0:03:55.138,0:03:58.865 說: 「噢!這太多了[br]如果我1天只吃1個?」 0:03:58.865,0:04:02.752 那我們可以來到這[br]修改這一個數字 0:04:02.752,0:04:04.329 所有都改好了 0:04:04.329,0:04:07.021 2萬3千個,還是很多 0:04:07.021,0:04:10.493 也許溫斯頓說:[br]「好吧好吧!如果我1週吃1個呢?」 0:04:10.493,0:04:12.477 嗯,這比較合理 0:04:12.477,0:04:15.025 那我們改 365 為 50 0:04:15.025,0:04:17.523 因為一年有50週,對吧? 0:04:18.103,0:04:22.802 好,看來好多了,是吧?[br]3千個,那蠻合理的 0:04:22.802,0:04:27.031 所以你看,運用函數和數值回傳 0:04:27.031,0:04:30.871 我們能保存程式碼,亦能保護生命