dram.me

Smalltalk的可扩展性

Smalltalk由于没有关键词,所有的语言结构都由统一的消息语法定义,可扩展性极强。

比如在Blue Book p.34提到,Smalltalk有ifTrue:ifFalse:消息,也有单分支的ifTrue:ifFalse:。如果需要去除单分支判断(用函数式编程的思路考虑,ifTrue:ifFalse:并不建议使用),在Smalltalk中,只需要删除Object>>ifTrue:ifFalse:即可(前提是未被使用)。而在有些语言中,复杂度则大大增加。原因有两点:

  1. 这些语言分支判断一般在解析和编译阶段,代码有一定复杂度;

  2. 这些语言的解析器和编译器一般不能方便修改。

从中可以看出Smalltalk语言的极大的灵活性。

另外一点,现在新近的语言大都有迭代器的概念。是为增加循环语句对用户自定义数据类型的支持。而在Smalltalk中,只需要针对那些数据类型定义相应的方法就可以了。详见Blue Book p.36中对do:的说明。

Smalltalk的面向对象与消息语法结合的灵活性还有一点,分支语句必须是Boolean类型,没有了其他语言中真值假值定义模糊的问题。