上一节你学到的逻辑组合的正式名称是“布林逻辑表示式(boolean logic expression)”。在程式中,布林逻辑可以说是无处不在。它们是电脑运算的基础和重要组成部分,掌握它们就跟学音乐掌握音阶一样重要。
在这节练习中,你将在 IRB 里使用到上节学到的逻辑表示式。先为下面的每一个逻辑问题写出你认为的答案,每一题的答案要嘛为 True 要嘛为 False。写完以后,你需要将 IRB 运行起来,把这些逻辑语句输入进去,确认你写的答案是否正确。
1\. true and true
2\. false and true
3\. 1 == 1 and 2 == 1
4\. "test" == "test"
5\. 1 == 1 or 2 != 1
6\. true and 1 == 1
7\. false and 0 != 0
8\. true or 1 == 1
9\. "test" == "testing"
10\. 1 != 0 and 2 == 1
11\. "test" != "testing"
12\. "test" == 1
13\. not (true and false)
14\. not (1 == 1 and 0 != 1)
15\. not (10 == 1 or 1000 == 1000)
16\. not (1 != 10 or 3 == 4)
17\. not ("testing" == "testing" and "Zed" == "Cool Guy")
18\. 1 == 1 and not ("testing" == 1 or 1 == 0)
19\. "chunky" == "bacon" and not (3 == 4 or 3 == 3)
20\. 3 == 3 and not ("testing" == "testing" or "Ruby" == "Fun")
在本节结尾的地方我会给你一个理清复杂逻辑的技巧。
所有的布林逻辑式都可以用下面的简单流程得到结果:
下面我们以 #20 逻辑式示范一下:
3 != 4 and not ("testing" != "test" or "Ruby" == "Ruby")
接下来你将看到这个复杂表达式是如何逐级解析为一个单独结果的:
3 != 4
为 True: true and not ("testing" != "test" or "Ruby" == "Ruby")
"testing" != "test"
为 True: true and not (true or "Ruby" == "Ruby")
"Ruby" == "Ruby"
: true and not (true or true)
()
中的每一个 and/or :
(true or true)
is True: true and not (true)
not (true)
is False: true and false
true and false
is False
这样我们就解出了它最终的值为 False .
Warning: 杂的逻辑表达式一开始看上去可能会让你觉得很难。而且你也许已经碰壁过了,不过别灰心,这些“逻辑体操”式的训练只是让你逐渐习惯起来,这样后面你可以轻易应对程式里边更酷的一些东西。只要你坚持下去,不放过自己做错的地方就行了。如果你暂时不太能理解也没关系,弄懂的时候总会到来的。
以下内容是在你自己猜测结果以后,通过和 IRB 对话得到的结果:
$ irb
ruby-1.9.2-p180 :001 > true and true
=> true
ruby-1.9.2-p180 :002 > 1 == 1 and 2 == 2
=> true
!=
、==
类似的操作符号。试着尽可能多的列出 Ruby 中的“等价运算符号”。例如 <
或是 <=
。!=
叫“not equal(不等于”。