|kermit skooter piggy henrietta|
声明了四个临时变量。这里还有叫做 Smalltalk 的一个变量,持有到所有声明的全局变量的引用并且我们使用 at:put: 消息来输入新项目。
Smalltalk at: #Kermit put: Frog new.
Smalltalk at: #Piggy put: Pig new.
Smalltalk at: #Henrietta put: Chicken new.
Smalltalk at: #Skooter put: Mongrel new.
如果没有别的要求所有变量都被初始化为 nil。使用 := 符号来把名字绑定到对象。
|fozzie| fozzie := Bear new.
建立类 Bear 的一个新实例并把它邦定到“fozzie”,此后我们可以接着向它发送消息直到它过期。
消息表达式是发送到对象的消息的一个序列,由句点分隔。消息名字应该指示想要得动作的类型。它们由选择子和随后的各自的消息组成,如果有的话。一元消息不要求参数,而二元参数以常见的中缀表示法写成。所有其他种类的消息使用到关键字来命名参数。
"到一个类的一元消息: 'new' 返回类 CookieMonster 的新建立的实例" CookieMonster new. "到一个实例的二元消息: '+' 返回类 integer 的一个实例(总和)" 7 + 7. "到一个实例的关键字消息: 'give:to:' 提示 Skooter 去 进行一个殷勤的举动" Skooter give: #flowers to: Henrietta
消息可以是嵌套的,在这种情况下适用一些简单规则: 分析次序是从左至右,优先级是: 一元 -> 二元 -> 关键字消息;在需要消除序列的歧义的地方必须使用圆括号。作为简写,发送到相同接收者的消息可以使用分号来“级联”,这样
fozzie center; show; dance
将初始化到 fozzie的消息的一个序列;就是说,首先导致它使它自身进入屏幕,向观众显示自己,并尝试一些娱乐表演。
所有的 Smalltalk 的数据结构都表示为对象,并且在它的类库中可大量获得。

对象(Object)是 Smalltalk的继承层次的根,提供对所有对象的一些基本功能。类搜集(Collection)是对象的众多子类之一,并且它自己可以被进一步指定为一套完整系列的数据结构。集合(Set)只是其中之一,有字典(Dictionary)作为它的子类。使用字典来存储成对的对象之间的关联。下面的代码在一个简单的例子中展示了这些数据结构的使用。首先定义了一个字典,把一些老朋友与一组美德关联在一起。接着发送消息到这些对象,列出和查找键。

Smalltalk贡献了面向对象的完全解释,即使是控制结构都被实现为消息模式。通过 ifTrue:、ifFalse: 和 ifFalse:ifTrue: 消息支持选择执行的待选路径。用 whileTrue:、whileFalse:、 timesRepeat:、do:、to:do:、collect: 或递归来指定循环。Smalltalk使用块的概念来推迟计算。块可以接受参数,可以有临时变量,并被用来封装以后可能执行的代码。此外它们还常用作给控制结构的参数。因为块自身是对象,它们可以绑定到标识符上。value 消息强制一个块的执行。

上面的工作空间展示了平常如何使用块的两个例子。第一种情况是,在一个循环内部流动于一定范围的数上作一个简单的测试。如果一个数是偶数,在记录簿中显示‘EVEN’,如果是奇数,则打印‘ODD'。这里我们限制我们的计数为三,所以将测试0、1 和 2。可以使用 whileTrue: 和 if..:消息的组合来完成这个任务。要注意的事情是,在 whileTrue:结构的情况下接收者和参数都必须是块,而在 ifTrue: 和 ifFalse:的情况下只有参数必须是块。第二个例子处理符号的一个列表。首先构造描述适当动作的块并命名为“canon”。这里要注意的是使用分号来前缀两个块参数的名字,用竖线来把他们与块体分隔开。任何临时变量,如果需要的话,将跟随在此后。这个块现在可以按需要执行多次,给出不同的值作为参数。在我们的例子中 value:value: 消息强制执行可疑品质(dubious quality)的三声合唱。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28676-5.html
_