• 所有一切都是物体(Everything is an Object)。这是Smalltalk中最重要的一条规则。
  • 一个变量没有与之关联的类型。变量仅仅指向物体
  • a := 2的真正含义不是“将a的值设置为整数2”,而是“让变量a指向一个值为2的SmallInteger(小整数)物体”
  • 所有的计算都通过消息(message)来触发。你向某个物体发送消息,然后就会发生某些事情。
  • (15 * 19) + (37 squared)可以理解为:向15发送消息 * ,参数为19;向37发送消息squared;最后向15*19的结果发送消息 + ,参数为37 squared的结果。
  • Smalltalk中所有的表达式都是<接受消息的物体> <消息>
    • 消息激发方法。一个消息会对应什么方法是由接受消息的物体决定的。
    • 每条消息(to: do:, whileTrue:, +)都会激发方法,这些方法是Smalltalk中的代码单元,你可以认为方法就是你常用的编程语言中的函数或者过程。方法是计算发生的地方。。你不仅可以查看它们的控制结构和操作是如何实现的——而且还能改动它们!
  • 每一个物体都是某类事物的一个实例。
    • 由于该类(事物)中定义了此实例(物体)的行为,所以必须找到这个接受消息的物体所属于的类,然后通过类来指出应该如何解释收到的消息。这一点非常重要。 (代码的位置,高层和底层视角的切换 很微妙)
  • 类是定义方法(行为)的地方,决定了物体是否有某种能力(能执行某个动作),所有代码都能在类中找到,没有魔术
  • Smalltalk中没有什么要记住的关键字(甚至没有if,你可以自己实现)!使用Smalltalk,就像用小积木,能让你搭建出你想要的任何东西。
    • 在Smalltalk语言中没有条件语句,取而代之的是一些发送给对象true或者false的消息,因此它们不属于语言部分,而属于Smalltalk的类库;也没有循环重复语句(C语言中的for, while),Smalltalk用向数字对象或块对象发送消息来实现重复执行。
  • 语言没有固定的语法,语法分析由类本身完成
  • Smalltalk是一种使用“晚绑定(late-binding”的语言,让相同的消息在不同的数据上执行近似的功能成为多态。当你看到一个printString消息时,你实际上并不知道将会执行什么,直到你了解这个消息被发送给哪个物体后,才能清楚到底会执行什么内容
  • 从smalltalk这里学习对象,从lisp那里学习函数
  • 面向对象编程的精髓在于将行为绑定在数据上
  • 在结构化程序设计之中,我们将精力集中在行为(动词)上,然后弄清楚我们需要哪些数据(名词)才能执行。总而言之,我们将数据绑定在行为上。但在面向对象程序设计之中,我们将程序的中心用名词和数据表示,然后弄清楚我们要将哪些行为绑定在他们之上
  • Smalltalk和Scheme都非常优美纯粹,一致性非常好,相比之下,主流工业语言有些大杂烩,不少由于妥协导致的不一致,以及难以理解
  • 严格遵照一个唯一标准机制的做法已经被证明具有惊人的威力
  • 学习纯粹的语言,能让你更容易搞懂核心概念,而不会被各种枝节分神,而这些概念是大多编程语言的核心

##参考资料 * Smalltalk wiki * Smalltalk为什么让我爱不释手 * Smalltalk的基本规则