你已經學過使用 `=` 給變量命名,以及將變量定義為某個數字換字符串。接下來我們將讓你見證更多奇跡。我們要示范給你的是如何使用 `=` 來將變量設置為「一個函數的值」。有一件事你需要特別注意,但待會再說,先輸入下面的腳本吧:
~~~
def add(a, b)
puts "ADDING #{a} + #{b}"
a + b
end
def subtract(a, b)
puts "SUBTRACTING #{a} - #{b}"
a - b
end
def multiply(a, b)
puts "MULTIPLYING #{a} * #{b}"
a * b
end
def divide(a, b)
puts "DIVIDING #{a} / #{b}"
a / b
end
puts "Let's do some math with just functions!"
age = add(30, 5)
height = subtract(78,4)
weight = multiply(90, 2)
iq = divide(100, 2)
puts "Age: #{age}, Height: #{height}, Weight: #{weight}, IQ: #{iq}"
# A puzzle for the extra credit, type it in anyway.
puts "Here is a puzzle."
what = add(age, subtract(height, multiply(weight, divide(iq, 2))))
puts "That becomes: #{what} Can you do it by hand?"
~~~
現在我們創造了我們自己的加減乘除數學函數:`add`、`subtract`、`multiply` 以及 `divide`。最重要的是函數的最后一行,例如 `add` 的最后一行是 `return a + b`,它實現的功能是這樣的:
1. 我們調用函數時使用了兩個參數:`a` 和 `b`。
2. 我們輸出這個函數的功能,這里就是計算加法(ADDING)。
3. 接下來我們告訴 Ruby 讓他做某個返回的動作:我們將 a+b 的值傳回 (return)。或者你可以這么說:「我將 a 和 b 加起來,再把結果傳回。」
4. Ruby 將兩個數字相加,然后當函數結束時,它就可以將 `a + b` 的結果賦予給一個變量。
和本書里的很多其他東西一樣,你要慢慢消化這些內容,一步一步執行下去,追蹤一下究竟發生了什么。為了幫助你理解,本節的加分習題將讓你解決一個謎題,并且讓你學到點比較酷的東西。
# 你應該看到的結果
* * * * *
~~~
$ ruby ex21.rb
Let's do some math with just functions!
ADDING 30 + 5
SUBTRACTING 78 - 4
MULTIPLYING 90 * 2
DIVIDING 100 / 2
Age: 35, Height: 74, Weight: 180, IQ: 50
Here is a puzzle.
DIVIDING 50 / 2
MULTIPLYING 180 * 25
SUBTRACTING 74 - 4500
ADDING 35 + -4426
That becomes: -4391 Can you do it by hand?
$
~~~
# 加分習題
* * * * *
1. 如果你不是很確定 `return` 回來的值,試著自己寫幾個函數出來,讓它們傳回一些值。你可以將任何可以放在 `=` 右邊的東西作為一個函數的返回值。
2. 這個腳本的結尾是一個謎題。我將一個函數的返回值當作了另外一個函數的參數。我將它們鏈接到了一起,接跟寫數學等式一樣。這樣可能有些難讀,不過執行一下你就知道結果了。接下來,你需要試試看能不能用正常的方法實現和這個方程式一樣的功能。
3. 一旦你解決了這個謎題,試著修改一下函數里的某些部分,然后看會有什么樣的結果。你可以有目的地修改它,讓它輸出另外一個值。
4. 最后,倒過來做一次。寫一個簡單的等式,使用一樣的函數來計算它。
- 笨方法更簡單
- 習題 00: 準備工作
- 習題 01: 第一個程序
- 習題 02: 注釋和#號
- 習題 03: 數字和數學計算
- 習題 04: 變量的命名
- 習題 05: 更多的變量和輸出
- 習題 06: 字符串和文字
- 習題 07: 更多輸出
- 習題 08: 輸出,輸出
- 習題 09: 輸出,輸出,輸出~
- 習題 10: 那是啥?
- 習題 11: 提問
- 習題 12: 模塊
- 習題 13: 參數,解包,參數
- 習題 14: 提示和傳遞
- 習題 15: 讀取文件
- 習題 16: 操作文件
- 習題 17: 更多的文件操作
- 習題 18: 命名,變量,代碼,函數
- 習題 19: 函數和變量
- 習題 20: 函數和文件
- 習題 21: 函數可以傳入信息
- 習題 22: 到現在你學到了什么?
- 習題 23: 閱讀一些代碼
- 習題 24: 更多練習
- 習題 25: 更多更多的練習
- 習題 26: 恭喜你,現在來考試了!
- 習題 27: 記住邏輯關系
- 習題 28: Boolean表達式練習
- 習題 29: 如果
- 習題 30: Else 和 If
- 習題 31: 做出判斷
- 習題 32: 循環和數組
- 習題 33: While
- 習題 34: 存取數組里的元素
- 習題 35: 分支和函數
- 習題 36: 設計和測試
- 習題 37: 重視各種符號