加载中...

习题 21: 函式可以传回东西


你已经学过使用 = 给变量命名,以及将变量定义为某个数字换字串。接下来我们将让你见证更多奇蹟。我们要示范给你的是如何使用 = 来将变量设置为“一个函式的值”。有一件事你需要特别注意,但待会再说,先输入下面的脚本吧:

  1. def add(a, b)
  2. puts "ADDING #{a} + #{b}"
  3. a + b
  4. end
  5. def subtract(a, b)
  6. puts "SUBTRACTING #{a} - #{b}"
  7. a - b
  8. end
  9. def multiply(a, b)
  10. puts "MULTIPLYING #{a} * #{b}"
  11. a * b
  12. end
  13. def divide(a, b)
  14. puts "DIVIDING #{a} / #{b}"
  15. a / b
  16. end
  17. puts "Let's do some math with just functions!"
  18. age = add(30, 5)
  19. height = subtract(78,4)
  20. weight = multiply(90, 2)
  21. iq = divide(100, 2)
  22. puts "Age: #{age}, Height: #{height}, Weight: #{weight}, IQ: #{iq}"
  23. # A puzzle for the extra credit, type it in anyway.
  24. puts "Here is a puzzle."
  25. what = add(age, subtract(height, multiply(weight, divide(iq, 2))))
  26. puts "That becomes: #{what} Can you do it by hand?"

现在我们创造了我们自己的加减乘除数学函式:addsubtractmultiply 以及 divide。最重要的是函式的最后一行,例如 add 的最后一行是 return a + b,它实现的功能是这样的:

  1. 我们呼叫函式时使用了两个参数:a 和 b
  2. 我们印出这个函式的功能,这里就是计算加法(ADDING)。
  3. 接下来我们告诉 Ruby 让他做某个回传的动作:我们将 a+b 的值传回 (return)。或者你可以这么说:“我将 a 和 b 加起来,再把结果传回。”
  4. Ruby 将两个数字相加,然后当函式结束时,它就可以将 a + b 的结果赋予给一个变量。

和本书里的很多其他东西一样,你要慢慢消化这些内容,一步一步执行下去,追踪一下究竟发生了什么。为了帮助你理解,本节的加分习题将让你解决一个谜题,并且让你学到点比较酷的东西。

你应该看到的结果

  1. $ ruby ex21.rb
  2. Let's do some math with just functions!
  3. ADDING 30 + 5
  4. SUBTRACTING 78 - 4
  5. MULTIPLYING 90 * 2
  6. DIVIDING 100 / 2
  7. Age: 35, Height: 74, Weight: 180, IQ: 50
  8. Here is a puzzle.
  9. DIVIDING 50 / 2
  10. MULTIPLYING 180 * 25
  11. SUBTRACTING 74 - 4500
  12. ADDING 35 + -4426
  13. That becomes: -4391 Can you do it by hand?
  14. $

加分习题

  1. 如果你不是很确定 return 回来的值,试着自己写几个函式出来,让它们传回一些值。你可以将任何可以放在 = 右边的东西作为一个函式的传回值。

  2. 这个脚本的结尾是一个谜题。我将一个函式的传回值当作了另外一个函式的参数。我将它们链接到了一起,接跟写数学等式一样。这样可能有些难读,不过执行一下你就知道结果了。接下来,你需要试试看能不能用正常的方法实现和这个方程式一样的功能。

  3. 一旦你解决了这个谜题,试着修改一下函式里的某些部分,然后看会有什么样的结果。你可以有目的地修改它,让它输出另外一个值。

  4. 最后,倒过来做一次。写一个简单的等式,使用一样的函式来计算它。

这个习题可能会让你有些头大,不过还是慢慢来,把它当做一个游戏,解决这样的谜题正是写程式的乐趣之一。后面你还会看到类似的小谜题。


还没有评论.