逻辑——消除歧义的工具
我们平时说话所用的语言被称为自然语言。自然语言的缺点就是容易引起歧义。这就体现出了逻辑语言的重要性。举以下一个例子:
技术员:这个水坝系统设计思路为按下紧急按钮或者水位高于危险水位的时候,报警器就会报警。
提问者:这个“或者”是排他么?
技术员:什么意思呢?
提问者:就是,当按下紧急按钮的同时水位超过危险水位的时候,报警器会报警么?
技术员:当然会啦!
****************************分割线************************************************
A:他现在在山东或者浙江。
B:这个“或者”是排他么?
A:什么意思呢?
B:就是他现在可能在山东同时又在浙江么?
A:当然不可能啦!
由此可见,身为一个程序员,必须走出自然语言的逻辑迷宫,逻辑有两方面的好处。一,可以消除自然语言中的歧义部分,更加严密准确的记述事物的工具。二,将更加难以表达的问题转变为更加浅显易懂的新式。
车费问题——兼顾完整性和排他性
费用规则A
6岁以上的乘客 | 100元 |
不到6岁的乘客 | 0元 |
那现在来看看完整性的问题——是否有遗漏的规则
费用规则B
乘客年龄大于6岁 | 100元 |
乘客年龄小于6岁 | 0元 |
因此,费用规则B就存在完整性的问题,不适于应用于实际生活
排他?防止歧义的操作
费用规则C
乘客年龄6岁以上 | 100元 |
乘客年龄6岁以下 | 0元 |
重复一定错误?
我们来看看以下的规则
费用规则D
乘客年龄6岁以上 | 100元 |
乘客年龄6岁 | 100元 |
乘客年龄不到6岁 | 0元 |
也许有时会觉得:“这不都是理所当然的么?不是很简单么?”
是的,粗略看来,似乎完整性和排他性很简单。但是在实际操作中,程序员通常要用上几十条,上百条的if语句来进行划分。然而在这错综复杂的if语句中,若是任意的完整性和排他性没有做好,就会产生BUG。考虑完整性时,需要将自己看作一个不正常的人(或者是故意找茬的人),这样才能充分的发现程序的逻辑是否有问题。