Smalltalk基础知识系列05:对象和消息之优先级

消息按照从左到右的顺序执行。括号表达式优先,一元消息次之,然后是二元消息,最后是关键字。

先看一个表达式
5 factorial between: 3 squared and: 3 * 5 * 9
上述表达式是有效的,但是用括号将它们区分开来,将会变得更容易阅读。如下:
 (5 factorial) between: (3 squared) and: (3 * 5 * 9)

Smalltalk程序员很自然的组合各种消息,但是这种方式不应该被过度使用而影响了阅读性。实际上,面向对象编程的规则其中的一种叫做Demeter's rule 强力反对这样来做。

执行组合的消息时,准从以下简单的规则,这些规则仅仅是为了阅读和学习Smalltalk代码,如下所示:
3 + 2 raisedTo: 2 squared + 7
“squared 因为是一元消息,首先执行;+  是二元消息,次之执行;raisedTo:  是关键字消息,最后执行”
相当于下面的这个表达式:
(3+2) raisedTo: ((2 squared) + 7)
“括号优先,一元次之,二元随后,关键字最后”

下面通过两个表达式来验证一下:
这些简单的规则应用于任何事物,没有更多在其它编程语言中可以发现的优先级方式,即使你期望能够有。例如:
5 + 3 * 4
上述表达式,是一个二元消息的运算顺序,并且被从左到右执行,相当于
 (5 + 3) * 4

它可能不是你期望的结果。为了避免这个问题,在复杂的表达式中使用括号,即使这样做不是必须的。添加括号不会影响执行的速度,但却可以提高阅读性。所以建议这样写,
 (5 * 3) + 4  来替代  5 * 3 + 4
即使两个表达式运行结果是一样的。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值