Ruby是 一种简单的面向对象编程语言,十分容易上手,并且功能强大。她是一个日本的Yukihiro Matsumoto(大家都叫他Matz.)在1995年首 次发布的。Ruby从Perl语言那里借鉴了许多东西(有人形象地说Ruby是Perl的漂亮的妹妹:),和Perl相似,Ruby也擅长于文本处理、系 统管理等任务。和Smalltalk一样,Ruby是一种纯粹的面向对象语言,任何东西都是对象。下面是Ruby语言的一些特性:
Ruby作为一种通用的程序设计语言,和其它常用的编程语言一样,可以编写大部分我们日常遇到的任务,而且完成得更简单优雅。已经有人用她编写了Web服务器程序、科学计算程序、视频游戏软件和其他有趣的应用。更多的人用她来做程序原形实验和处理每天遇到的各种琐碎的编程任务。
你想看Ruby代码?好的,下面就是用Ruby编写的几个简单程序的代码:
3.times do
print "Hello, world!/n"
end
sum = 0
for i in 1..100
sum += i
end
print "1+2+3+...+100 = ", sum, "/n"
def hello(name)
print "Hello, ", name, "/n"
end
hello("jellen")
class Man
def initialize(name)
@name = name
end
def show_info()
puts "I'm a man. My name is #{@name}."
end
end
jellen = Man.new("jellen")
jellen.show_info()
受 到了Perl的影响,当初Matz.也想给他发明的语言起一个珠宝的名字,所以后来他想到了“Ruby”(意思是红宝石),作为这种新语言的名字。在生肖 石中,pearl代表六月,ruby刚好是代表七月。所以他认为Ruby是一个作为比Perl更新的语言的好名字(但愿也是真的更好的)。
大 约在1993年的时候,Ruby之父Matz.开始对脚本语言(scrīpting language)感兴趣。在通过一些分析和思考之后,Matz.认 识到了脚本语言是可以变得很强大和灵活的,于是他准备把脚本语言作为他的发展方向。和很多人一样,Matz.是一个面向对象编程的fans,所以他想研究 一种面向对象的脚本语言。然后,他到网络上去搜集了一些相关的资料,并且很快发现了Perl 5,当时它还没有发布,并且准备支持面向对象编程。但是通过 一段时间了解后,Matz.发现这并不是他想的东西(可能是Perl语言非自然的面向对象方式使他厌恶),所以他放弃了把Perl当作一个面向对象的脚本 语言使用的念头。随后Matz转向了Python,Python生成是一个解释型的、面向对象语言,但是Matz发现它并不能完全算作“面向对象”语言。 Matz认为Python是面向对象和过程化程序设计语言(Procedural Programming Language)的混合产物。Matz.希 望找到的是一种比Perl更强大、比Python更面向对象的语言,但是在那个时候他找不到合适的。经过一番思想斗争,他打算自己设计一个全新的编程语 言。Matz.的开发从1993年2月24日开始,在同年夏天,第一个ruby语言程序"Hello, world!"成功运行。随后,Ruby语言的第 一个alpha版本在1994年12月发布。
在1996年以前,都是Matz.一个人在开发Ruby的;随着Ruby社区的渐渐形成,很 多社区成员都给了Matz.许多有意义的帮助,包括提交bug和patch等。现在,Ruby像其他开源软件一样,有自己的开发团队,任何有能力的个人或 团体都可以参与Ruby的进化。
Ruby是解释型的语 言,效率当然和传统编译型的语言有差距。未来的计划是使Ruby的运行效率和编译型语言更加相近。现在已经有了目标为编写Ruby虚拟机的Rite项目, 还有一个Cardinal项目在做Parrot虚拟机的Ruby前端程序。解释型执行确实在一定程度上影响了Ruby的运行速度,但是实际上Ruby在各 种语言运行速度测试上表现的相当好。虽然一般没有Perl那么快,但是并没有慢多少。
我们当然可以用Ruby做桌面应用程序,事实上也已经有很多人这样做了。但是在开始用Ruby做应用程序之前,你必须了解它不会像你的C++程序那样快,然后生成的程序文件体积会比原生程序大一点。
Python 和Ruby都声称自己是面向对象的程序设计语言,但是和Smalltalk不同,你可以在Python和Ruby中编写面向过程的程序代码。 Smalltalk只有对象,在完全理解对象、继承和相当数量的Smalltalk系统类之前,你不能做任何事情。通过提供对过程化编程范式的支持, Python和Ruby“修复”了这个使Smalltalk不能进入主流的原因(毕竟,过程化思想对初学者来说很好理解)。但是这两种语言是通过完全不同 (可以说正好相反)的方法来实现这个目标的。
Python是一种混合型的语言。它有函数的概念来支持过程化编程,也有对象的概念支持面向 对象编程。Python通过允许函数和方法之间用方法定义前显式的’self’参数的转化来连接这两个世界。当一个函数插入一个对象时,它的第一个参数自 动变成一个指向接受对象的引用。
但是,Ruby中的面向过程编程代码其实是“假装”出来的。Ruby语言是纯面向对象语言,它没有函数概 念,只有类方法调用。在一个Ruby“函数调用”中,方法的默认接受者是’self’,这是一个隐藏的参数,就像C++里面的’this’指针。一个在类 外面的’def’方法声明(这在Python里面是函数),在Ruby里这实际上是一个方法调用。这个“假的函数”会自动变成Object对象的一个私有 成员(Object对象是Ruby继承树中的根)。所以如果您对面向对象编程方法还不熟悉,您还是可以通过编写许多’def’方法,然后直接调用—这 样的面向过程思想来完成很多有用的代码的。
Ruby的纯面向对象特性提供了一些Python缺少的或者正在发展的特性:一个统一的单根继 承体系、元类、接受任何东西为子类和统一的方法调用(绝对没有len ()是函数但是items()是方法这种自相矛盾)。同Java类似,Ruby只支 持单继承,但是它有一个非常强大的Mix-in概念:一个类中可以包括多个模块(Module),然后把模块中的方法,常量等变成自己的东西。
而且,Ruby提供了和Smalltalk中功用相同的闭包(Closures)和程序块(Blocks)概念。Ruby的集合类库和迭代器是相当出色的,比Python提供的特殊解决方法更加强大和优雅。
Ruby 的语法和设计哲学深深地受到了Perl的影响。和Perl一样,我们可以把’if’,'while’等放在一个语句的尾部(比如这样 “print “Yes!” if a == 1”);然后Ruby中很多特性都是从Perl中直接拿过来的,比如对正则表达式的内置支持、 变 量 、 H e r e d o c u m e n t s 概 念 和 _变量、 Here documents概念和 变量、Heredocuments概念和、前缀是对不同类型的变量的修饰等。
如果你喜欢Perl,那么你也会喜欢Ruby的自由语句结构;如果你习惯Smalltalk和Java,那么你也会喜欢Ruby的OO语法,但是如果你喜欢Python,那么你可能喜欢也可能不喜欢Ruby,因为Python和Ruby之间设计哲学的相差的太大了
所以当你打算是用Python还是Ruby的时候,我建议你先两个都接触一下,看看自己对哪个比较感冒,然后再做决定。你要注意的是Ruby语法比Python复杂多了,不过幸运的是语法之间都是很优雅地结合在一起的。呵呵,但愿你会选择Ruby,并且成为一个快乐的Rubyiest!
Ruby 可以很好的在Windows系列、各种Linux、Unix和MacOS上运行,甚至在(Dos、BeOS、OS/2等不常见系统上也可以)。所以,你要 做的是到Ruby语言的主页:www.ruby-lang.org去下载你使用操作系统对应的Ruby安装程序,安装上去就可以了。然后建议你安装一个支 持Ruby语言的语法显亮的文本编辑器(比如Vim或者Emacs),这会使你的Ruby之旅更加惬意!
你 可以到www.ruby-doc.org去下载一个“ruby-doc-bundle”,你们有Ruby的用户手册,参考文档和被称为“Ruby语言圣 经”的《Programming Ruby》第1版的电子书。这些都是很有用的资料,可惜都是英文的,对英文不好的朋友是个障碍。不过随着Ruby的流 行,越来越多的Ruby教材资料会出版出来。