Return to Video

函數(影視版)

  • 0:01 - 0:05
    現在讓我們談談這段時間
    你們一直在使用的東西:
  • 0:05 - 0:06
    函數
  • 0:06 - 0:10
    每當你使用指令時,像是
    rect() 或 fill() 或 text()
  • 0:10 - 0:12
    你就在召喚函數
  • 0:12 - 0:15
    而那些函數依照你的指令去繪圖
  • 0:15 - 0:16
    函數到底是什麼?
  • 0:16 - 0:20
    它是一連串我們集合起來
    並給予名稱的程式碼
  • 0:20 - 0:24
    因為我們想能夠多次地
    重複使用哪一點功能
  • 0:24 - 0:26
    想一想 rect()
    rect() 做的是什麼?
  • 0:26 - 0:29
    它畫出四條線,對吧?
  • 0:29 - 0:32
    我們也可用 line() 函數
    做出相同的,是吧?
  • 0:32 - 0:34
    而我們也能得到一個貌似矩形的繪圖
  • 0:34 - 0:36
    但是我們發現
  • 0:36 - 0:39
    我們也想能夠多次繪畫矩形
  • 0:39 - 0:43
    如果每次都要計算怎麼
    從一個角落畫直線到另一個角落
  • 0:43 - 0:45
    再從一個角落到另一個角落
    就會變得很惱人
  • 0:45 - 0:48
    與其那樣
    我們不如寫一個 rect() 函數
  • 0:48 - 0:51
    而該函數做的正正就是這
  • 0:51 - 0:55
    跟那四行編碼做的一模一樣
    只是所需的碼少很多
  • 0:55 - 0:57
    那還蠻酷的
  • 0:57 - 1:02
    而 rect() 是其中一個在可汗學院
    所有學習課程中都可使用的函數
  • 1:02 - 1:08
    但是,你也可以在你的程式裏
    寫自己的函數
  • 1:08 - 1:10
    例如:我們設計一個程式
  • 1:10 - 1:14
    讓我們能多次繪製溫斯頓
  • 1:14 - 1:17
    說不定說個有關他的生命故事
  • 1:17 - 1:20
    然後展示出他人生裏的
    每個年齡階段
  • 1:20 - 1:24
    所以我們的溫斯頓繪製碼是可能是這樣:
  • 1:24 - 1:27
    我們有 faceX 和 faceY 變數
  • 1:27 - 1:29
    來儲存臉的中心位置
  • 1:29 - 1:30
    然後我們畫上眼和嘴
  • 1:30 - 1:33
    相對著那些變數
  • 1:33 - 1:35
    現在程式可以看到編碼
  • 1:35 - 1:38
    它不是在任何函數中
    所以會直接執行
  • 1:38 - 1:40
    而且只執行一次
  • 1:40 - 1:43
    好的,把它變成一個函數
  • 1:43 - 1:48
    這一步很似我們宣告變數的步驟
  • 1:48 - 1:49
    因為其實那正是我們在做的
  • 1:49 - 1:52
    所以我們寫 var drawWinston
  • 1:52 - 1:54
    幫它取個好名字,高描述性
  • 1:54 - 1:56
    然後一個 =
  • 1:56 - 1:59
    但在這,我們不寫一個數字或一個字串
  • 1:59 - 2:03
    而直接寫 function
    確定你拼對
  • 2:03 - 2:06
    之後一個空白括號 ()
  • 2:06 - 2:08
    然後一個開花括號 {
  • 2:08 - 2:10
    再一個關花括號 }
  • 2:10 - 2:11
    和最後的分號 ;
  • 2:11 - 2:15
    很好,我們需要做的是
    將我們想要的所有東西
  • 2:15 - 2:19
    放進函數的開和關花括號之間
  • 2:19 - 2:22
    我們就把所有編碼放進去
  • 2:22 - 2:26
    放它進我們的函數裏
    排好內縮,然後
  • 2:26 - 2:27
    噔噔!
  • 2:27 - 2:29
    現在我們有的便是這變數
  • 2:29 - 2:30
    它存着一個函數
  • 2:30 - 2:34
    也就是說我們給了
    這編碼區塊一個標籤
  • 2:34 - 2:37
    以便我們於任何時間告訴我們的程式:
  • 2:37 - 2:41
    嘿!找出那個有標籤的
    編碼區塊然後執行它!
  • 2:41 - 2:44
    我們正令這編碼變得可再用
  • 2:44 - 2:46
    但注意,我們現在沒有任何溫斯頓!
  • 2:46 - 2:49
    我們丟了溫斯頓!
    他跑了去哪裡?
  • 2:49 - 2:53
    好的,當我們放這於函數裏
  • 2:53 - 2:56
    我們便告訴了程式:
    嘿,這裡有一堆程式碼
  • 2:56 - 2:58
    我想稍後能夠執行
  • 2:58 - 3:01
    但只當我叫你去執行時才動手
  • 3:01 - 3:04
    我們需告訴它去執行程式碼
  • 3:04 - 3:06
    就是指我們需召喚函數
  • 3:06 - 3:09
    就如我們執行ellipse() 和
    rect() 和 line() 時一樣
  • 3:09 - 3:14
    我們寫下函數名稱
    drawWinston
  • 3:14 - 3:16
    隨後接上一個括號 ()
  • 3:16 - 3:18
    當然還有分號 ;
  • 3:18 - 3:19
    噔噔!
  • 3:19 - 3:21
    我們有個溫斯頓了!
  • 3:21 - 3:24
    好,我覺得它很酷
    但你可能不覺它很酷
  • 3:24 - 3:29
    因為我們做的一切
    就是程式做它之前就會做的
  • 3:29 - 3:30
    有點好笑吧?
  • 3:30 - 3:33
    函數的用意就在於重複使用
  • 3:33 - 3:35
    現在就來試試
  • 3:35 - 3:38
    我們可以復製貼上這函數召喚
  • 3:38 - 3:41
    噔噔!噔噔!
    一遍又一遍地
  • 3:41 - 3:44
    嗯,但看起來好像一樣
  • 3:44 - 3:46
    喔,成功了
  • 3:46 - 3:48
    它繪出了許多溫斯頓
  • 3:48 - 3:51
    但問題是它們全在同一個地方
  • 3:51 - 3:54
    如果我們有X光眼的話
    就是可以看穿畫布
  • 3:54 - 3:56
    看見三個溫斯頓
  • 3:56 - 4:00
    但我沒有X光眼
    (我不知道你)
  • 4:00 - 4:03
    但是,我們可以對函數
    做一些小小的改變
  • 4:03 - 4:05
    讓它現身
  • 4:05 - 4:09
    你看 faceX 和 faceY
    它們永遠都是202 和 208
  • 4:09 - 4:12
    我們可利用
    函數 random() 來改變這
  • 4:12 - 4:14
    要不 random() 從 50 到 350
  • 4:14 - 4:17
    它便會隨機產生一個
    於那兩數之間的數字
  • 4:17 - 4:19
    我們可以在這做一樣的
  • 4:19 - 4:22
    所以每當這函式被召喚時
  • 4:22 - 4:23
    它便會產生這新的隨機數
  • 4:23 - 4:27
    如果我們按 restart
    我們便可得到隨機溫斯頓
  • 4:27 - 4:28
    太厲害了!
  • 4:30 - 4:31
    好,我覺得這很酷因爲
  • 4:31 - 4:35
    如果我們沒有擺它在函式裏
    原本該需要一大堆編碼來寫這
  • 4:35 - 4:37
    本來會有三倍的程式碼
  • 4:38 - 4:41
    不過目前仍然不是它用處的極致
  • 4:41 - 4:43
    因爲我們大概不想要隨機溫斯頓
  • 4:43 - 4:47
    我們也許想能夠放將溫斯頓
    在螢幕上一個固定的地方
  • 4:47 - 4:48
    所以請密切留意
  • 4:48 - 4:52
    因爲我們將講解
    如何傳遞參數給函數
  • 4:52 - 4:54
    而你便能學會做那
Title:
函數(影視版)
Description:

more » « less
Video Language:
Turkish
Duration:
04:56

Chinese, Traditional subtitles

Revisions