C++和Java程序员的Smalltalk入门

类别:编程语言 点击:0 评论:0 推荐:
C++和Java程序员的Smalltalk入门

 

原文标题:I Can Read C++ and Java But I Can’t Read Smalltalk

原文作者:Wilf LaLonde

原文链接:http://www.eli.sdsu.edu/courses/spring01/cs635/readingSmalltalk.pdf

 

 

简介

 

有很多人告诉我他很熟悉C++或Java,但是却完全读不懂Smalltalk的代码。对于他们来说,Smalltalk简直无法理解!对于这个问题我考虑了很久然后得到的结论是他们是对的。如果我随便挑出一些自己多年以前写的Smalltalk代码,然后假设我只明白Java去阅读的时候,我确信我是无法理解那些代码的。其实要读懂Smalltalk只须了解一些非常简单的概念,当然有些概念也是比较微妙。如果“Johnny读不懂Smalltalk代码”,我有办法。我的办法就是通过实际的例子来帮助新手快速理解Smalltalk的概念。我假设读者了解什么是面向对象变成,对于那些已经掌握Smalltalk的读者也请先假装一会没有学过smalltalk。

 

如此简单的文法

 

有些语法是很容易理解的,例如使用双引号来标识注视块;单引号标示字符串,单个字符前面加$(例如:$x标示字符“x”)。除此之外,还有symbol的概念,这是一个特殊的字符串,在整个内存中是唯一的。当源代码被编译的时候,编译器会搜索整个内存,如果发现相同的symbol存在则使用已存在的那个。有理数并不节省内存,但是相对于symbol而言处理速度更快(稍候解释)。

“this is a comment”

‘this is a string’

#’this is a symbol’

#thisIsASymbolToo

 

对于赋值操作和等于号,差别不是很大。

:= //Means assignment

= //Means equality comparison

== //Means identity comparison

 

如果你给我分别使用’a’和’b’命名的对象的引用,我可以告诉你他们是否是同样的对象(使用a == b, 命名等价)或看上去相同实质上不同的对象(使用 a = b构造等价)。直观的来说,== 比较两个被引用对象的地址是否相同,而 = 则比较两个对象的整个内容是否相同。

Smalltalk代码中很少用到逗号,因为他们不是Smalltalk文法组成的一部分。这就是为什么Smalltalk的数组是没有逗号的。例如:

#(1 2 3 4 5)

 

然而,都好是smalltalk的一个操作符。因此你会看到他被用来连接两个字符串,例如:

‘string1’,’string2’

 

 

无处不在的关键字

 

分号与句号的不同

 

Get/Set方法使用与实例变量相同的名称

 

Collection的广泛使用

 

 

序列化抽象无须创建新的class

 

结论

 

 

本文地址:http://com.8s8s.com/it/it25686.htm