你的分享就是我们的动力 ---﹥

Ruby语言FAQ(1)

时间:2011-08-23 14:51来源:www.chengxuyuans.com 点击:

1、Ruby是什么东东?

Ruby是一种简单的面向对象编程语言,十分容易上手,并且功能强大。她是一个日本的Yukihiro Matsumoto(大家都叫他Matz.)在1995年首次发布的。Ruby从Perl语言那里借鉴了许多东西(有人形象地说Ruby是Perl的漂亮 的妹妹:),和Perl相似,Ruby也擅长于文本处理、系统管理等任务。和Smalltalk一样,Ruby是一种纯粹的面向对象语言,任何东西都是对 象。下面是Ruby语言的一些特性:

◆语法简单、优雅
◆ 解释型执行、方便快捷
◆完全面向对象
◆内置正则式引擎,适合文本处理
◆拥有很多高级特性(操作符重载、Mix-ins、Singleton Methods,...)
◆有优雅、完善的异常处理机制
◆自动垃圾收集
◆高度可移植性(在Windows, Unix, Linux, MacOS上都可以运行)

2、Ruby能干什么?给我看一些Ruby语言代码!

Ruby作为一种通用的程序设计语言,和其它常用的编程语言一样,可以编写大部分我们日常遇到的任务,而且完成得更简单优雅。已经有人用她编写了 Web服务器程序、科学计算程序、视频游戏软件和其他有趣的应用。更多的人用她来做程序原形实验和处理每天遇到的各种琐碎的编程任务。

你想看Ruby代码?好的,下面就是用Ruby编写的几个简单程序的代码:

# 1 - 打印3次“Hello, world!”

3.times do print "Hello, world!\n" end

# 2 - 计算“1 + 2 + 3 + ... + 100”

sum = 0 for i in 1..100 sum += i end print "1+2+3+...+100 = ", sum, "\n"

# 3 - 简单的方法调用

def hello(name) print "Hello, ", name, "\n" end

hello("jellen")

# 4 - 简单的Ruby类和它的调用

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()

3、“Ruby”这个名字从何而来?

受到了Perl的影响,当初Matz.也想给他发明的语言起一个珠宝的名字,所以后来他想到了“Ruby”(意思是红宝石),作为这种新语言的名 字。在生肖石中,pearl代表六月,ruby刚好是代表七月。所以他认为Ruby是一个作为比Perl更新的语言的好名字(但愿也是真的更好的)。

4、我对Ruby的历史感兴趣,请讲点关于Ruby发展历程的东西。

大约在1993年的时候,Ruby之父Matz.开始对脚本语言(scripting 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的进化。

5、Ruby的运行效率如何?我能用Ruby编写应用程序吗?

Ruby是解释型的语言,效率当然和传统编译型的语言有差距。未来的计划是使Ruby的运行效率和编译型语言更加相近。现在已经有了目标为编写 Ruby虚拟机的Rite项目,还有一个Cardinal项目在做Parrot虚拟机的Ruby前端程序。解释型执行确实在一定程度上影响了Ruby的运 行速度,但是实际上Ruby在各种语言运行速度测试上表现的相当好。虽然一般没有Perl那么快,但是并没有慢多少。

我们当然可以用Ruby做桌面应用程序,事实上也已经有很多人这样做了。但是在开始用Ruby做应用程序之前,你必须了解它不会像你的C++程序那样快,然后生成的程序文件体积会比原生程序大一点。

6、听说Python也很不错,Ruby和它相比有什么特点?我要选择哪个呢?

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中直接拿过来的,比如对正则表达式的内置支持、$_变量、 Here documents概念和$、前缀是对不同类型的变量的修饰等。

如果你喜欢Perl,那么你也会喜欢Ruby的自由语句结构;如果你习惯Smalltalk和Java,那么你也会喜欢Ruby的OO语法,但是如果你喜欢Python,那么你可能喜欢也可能不喜欢Ruby,因为Python和Ruby之间设计哲学的相差的太大了。

所以当你打算是用Python还是Ruby的时候,我建议你先两个都接触一下,看看自己对哪个比较感冒,然后再做决定(jellen是因为不习惯 Python古怪的缩进语法才投奔Ruby的)。你要注意的是Ruby语法比Python复杂多了,不过幸运的是语法之间都是很优雅地结合在一起的。呵 呵,但愿你会选择Ruby,并且成为一个快乐的Rubyiest!

7、我想学Ruby,但是不知道我的系统是否支持?我需要安装什么软件?

Ruby可以很好的在Windows系列、各种Linux、Unix和MacOS上运行,甚至在(Dos、BeOS、OS/2等不常见系统上也可以)。所以,你要做的是到Ruby语言的主页:www.ruby-lang.org去下载你使用操作系统对应的Ruby安装程序,安装上去就可以了。然后建议你安装一个支持Ruby语言的语法显亮的文本编辑器(比如Vim或者Emacs),这会使你的Ruby之旅更加惬意!

8、哪里有Ruby的学习资料?

你可以到www.ruby-doc.org去下载一个“ruby- doc-bundle”,你们有Ruby的用户手册,参考文档和被称为“Ruby语言圣经”的《Programming Ruby》第1版的电子书。这些都是很有用的资料,可惜都是英文的,对英文不好的朋友是个障碍。不过随着Ruby的流行,越来越多的Ruby教材资料会出 版出来。

转载注明地址:http://www.chengxuyuans.com/Ruby/6969.html