假设一个人已经知道C编程,我们可以从Smalltalk学到什么?显然,Objective-C中有很多概念不在C语言中(即消息传递,接口,协议,动态类型,委托,反射;它是面向对象的!)但是源自Smalltalk.
编辑:我已经在问题中添加了C编程语言,因为普遍的共识是学习C比学习Smalltalk更好地利用一个人的时间(当谈到Objective-C编程时).
解决方法
8 + 9 / 23 + 16 * 8
以严格的从左到右的顺序进行评估,因为运算符”,’/’和’*’对于语言没有特殊含义,只是传递给数字对象的消息.
Objective-C将Smalltalk样式的对象添加到C中,但也是C的严格超集,它保留了C的原始类型和内置运算符.因此,在Objective-C中,正常的数学运算顺序将应用于上面的表达式 – 除法和乘法将首先完成,然后是加法.
学习C对于彻底理解Objective-C绝对必不可少. Objective-C是C的严格超集,并且尽可能明确地使用完全相同的语法和语义.它通过C保留指向事物的指针而不知道如何对事物应用任何操作的能力将对象的概念移植到C上.然后,它扩展了C语法,以提供一种向对象发布消息以及声明和实现对象可能接收的消息的方法.
Objective-C运行时的许多一般设计,特别是与Cocoa结合使用时,直接来自Smalltalk,包括选择器的概念,使用元类作为类的实例的工厂,继承的层次结构和系统,模型 – 视图 – 控制器的划分(Smalltalk原创,虽然现在几乎无处不在)和标准集合和对象上定义的许多消息.
在我的脑海中,Smalltalk在其流量控制系统方面也有很大的不同,并且有一个类似但略有不同的“块”概念(尽管大多数新实现都使这两者成为一致). Apple实际上已经将块实现为C级的扩展,而Objective-C对象上的许多新方法都使用它.
尽管如此,Goldberg Smalltalk-80的书写得非常好,易于阅读且语言非常简单,您只需两到三章即可学习整个语言.大多数复杂性被运行时中可用的对象吞噬,显然这些东西不会传输.对你有益的是,关于对象和运行时的意识形态的东西最终与打印中的细节非常分离.相反,C使流控制和算术之类的东西成为语言特征,这意味着在你真正感觉到你知道发生了什么之前,需要更多的语法和阅读.
因此,总之:Smalltalk-80书(紫色书)绝对值得一读,非常有用,但不一定完全相关.在任何情况下学习C都是必不可少的我对K& R的引用是为了比较.