我现在正在学习Smalltalk。它看起来非常类似于Python(其实相反,Python很像Smalltalk),所以作为一个Python爱好者,我想知道是否值得学习。
除了消息传递外,Smalltalk和Python之间还有哪些显著的概念差异可以让我看到新的编程视野?
我现在正在学习Smalltalk。它看起来非常类似于Python(其实相反,Python很像Smalltalk),所以作为一个Python爱好者,我想知道是否值得学习。
除了消息传递外,Smalltalk和Python之间还有哪些显著的概念差异可以让我看到新的编程视野?
if/else
、短路布尔运算符和循环都是语言本身的一部分。在Smalltalk中,它们只是消息。从这个意义上说,虽然Python和Smalltalk都认为“每个东西都是一个对象”,但Smalltalk更进一步,还断言“每个东西都是一个消息”。((x > y) and: [x > z])
ifTrue: [ ... ]
ifFalse: [ ... ]
注意,and:
只是在Boolean
上的一个消息(它本身作为将消息>
传递给x
的结果),而and:
的第二个参数不是一个简单的表达式,而是一个代码块,使得惰性(即短路)求值成为可能。这会得到另一个Boolean
对象,它也支持消息ifTrue:ifFalse:
,接受另外两个代码块(即lambda)作为参数,并根据布尔值运行其中一个或另一个。
ifTrue:
是发送给布尔值的一条消息,它接受一个代码块作为参数。 - ChuckSmalltalk语言本身非常重要。它由一组强大而正交的特性组成,使得该语言具有高度可扩展性。正如Alan Lovejoy所说:“Smalltalk之所以有趣是因为定义和使用特定领域语言(DSL)不是事后想法,而是Smalltalk工作的唯一方式。” 语言符号表示法非常关键,因为“所使用的编程符号表达能力的差异确实很重要”。欲了解更多信息,请在此处阅读完整文章。