跳转到内容

Smalltalk 编程/语法

来自维基教科书,开放的书籍,为开放的世界

Smalltalk 拥有所有计算机语言中最简单的语法之一。有 3 种不同的方法调用类型 - 一元、二元和 N 元关键字。每种方法调用规则都从左到右扫描优先级。像往常一样,优先级可以用括号覆盖。

1. 一元方法。可以像 **display redrawEverything** 一样简单;对象 **display** 会查找其 **redrawEverything** 方法以进行无条件重绘,并执行它。一元方法及其作用的对象都是不以冒号结尾的字母数字词。当您看到多个这样的词连续出现时,左侧的词是对象,其余的是方法调用的序列。

display redrawEverything.

2. 二元方法。在 **myNumber + 5.** 中,对象 **myNumber** 被告知查找 **+** 方法,并使用 5 作为参数运行它。在这里,参数被丢弃,**:=** 赋值将在稍后进行。二元方法名称是 1 或 2 个特殊字符;它们只存在于数学和逻辑方程式的常见嫌疑人中。数学运算符没有特殊的优先级,您必须按想要的方式陈述它们,或者使用括号。

myNumber + 5.

3. 关键字方法。这是 Smalltalk 与大多数其他编程语言的不同之处。在 **display drawFromX:1 fromY:1 toX:50 toY:100.** 中,display 被调用了一个方法和 4 个参数。方法的名称是 **drawFromX:fromY:toX:toY: **,参数按位置传递到方法中。如果要调用另一个关键字方法而不会将两者混合在一起,可以使用逗号运算符、括号,或者只是将结果带到新的语句中。

display drawFromX: 1 fromY: 1 toX: 50 toY: 100.

一个语句可以选择以赋值开头,至少有一个起始对象,并向该对象发送至少一个方法。语句以句点结束。

| myNumber |
myNumber := 3 + 5. "the period ends this statement"

display drawFromX: 1 fromY: 1 toX: 50 toY: 100.

一个 **[块]** 是一个带有括号的语句集,它们作为一个单个对象捆绑在一起,可以通过流程控制式方法触发。在 **4 < 5 ifTrue: [ Transcript print: '4 is less than 5!' ].** 中,4<5 评估为布尔对象 **true**,它总是执行通过 **ifTrue: **方法传递的块。

4 < 5 ifTrue: [ Transcript print:'4 is less than 5!' ].
华夏公益教科书