Ruby是什么

想知道 Ruby 为什么会如此受欢迎吗?为什么使用过它的支持者都称赞它为巧妙、优雅且易用更实用有趣的语言?

Ruby 发明者的理想

Ruby 是一个注重均衡的语言,它的发明者松本行弘 Yukihiro “matz” Matsumoto,混合了他喜欢的语言(Perl、 Smalltalk、 Eiffel、 Ada 和 Lisp ) 产生了一种具有函数式及指令程序设计特性的新语言。

他常说,他是“试着让 Ruby 更自然,而不是简单,就像生活一样”。

除此之外,他还提到:

Ruby 就像人的身体一样,表面上看来简单,但是内部却相当的复杂[1]。

Ruby 的成长

在 1993 年,没有人会相信一个由日本业余语言设计者创建的面向对象的语言,能最终在世界范围内被广泛使用并且变得几乎像 Perl 那样流行。自从 1995 年 Ruby 公开发表以来,Ruby 在全球吸引了许多忠实的程序设计员。在 2006 年,Ruby 被广泛接受。在各大城市都有活跃的使用者并通过社区举办许许多多场场爆满的研讨会。

Graph courtesy of Gmane.

在 Ruby-Talk,主要的 邮件列表 上,讨论 Ruby 语言的文章爬升到每日 200 封。

TIOBE, 最流行的开发语言排名调查中, Ruby 排名为全球第 11 位。 根据这样的成长情况,他们预测“在半年之中 Ruby 将会进入最受欢迎开发语言的前 10 名。”有越来越多受欢迎的软件如 Ruby on Rails web framework2 是使用 Ruby 撰写而成,也是造成 Ruby 如此快速成长的原因。

Ruby 是开源软件。 不只是免费,而且可以自由的使用、复制、修改与发布。

所见到的都是对象

最初,Matz 从其它语言中找寻理想的语法,在网络上他做了一段时间的调查,找到候选如“Perl“和“Python“。但都不是他想要的,他需要一个比 Perl 更强大、比 Python 更面向对象的语言[3]。

在 Ruby 中,所有的东西都是对象,所有的信息和代码都可以给它们所拥有的属性和行为。面向对象程序设计中称属性为实例变量(instance variables),称命令为方法 (methods)。 从下列程序代码中看到 Ruby 能够给数字赋于行为,从这点可以证明 Ruby 是纯面向对象的语言。

5.times { print "We *love* Ruby -- it's outrageous!" }

在许多语言中,数字和其它原生的类型都不是对象。而 Ruby 受 Smalltalk 语言影响,让所有的类型都可以赋予方法及产生实例变量,并让这些规则适用于 Ruby 所有对象。

Ruby 的灵活性

Ruby 是一个相当灵活的语言,她允许用户去改变她本身。 Ruby 的核心部分可以被更改或重新定义,模块可以被添加。Ruby 试着不去妨碍程序员。

比如(+) 是用做加法的运算符。如果你更喜欢使用易读的 plus 的话,你可以给 Ruby 的内建 Numeric 类添加一个函数。

class Numeric
  def plus(x)
    self.+(x)
  end
end

y = 5.plus 6
# y is now equal to 11

Ruby 的符号只是语法的甜头 (syntactic sugar)。你可以随时重定义他们。

Blocks,一个独特且强大的特性

Ruby 的代码块是非常强大的。程序员可以给任何函数添加一个密封 (closure) 来表述这个函数该如何工作。密封也被叫做代码块,是用过其他比如 PHP, Visual Basic 等规则语言的 Ruby 的初学者最喜欢使用的一个功能。

代码块取自函数语言。Matz 说:“我希望在 Ruby 的密封中融入 Lisp 的文化 [4]。”

search_engines = 
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end

在上面的代码中,代码块是在 do ... end 中的结构。 map 函数将代码块应用到一个词的列表中。Ruby 的其他函数经常会为程序员留出一个空当给代码块来控制函数的功能。

Ruby 与 Mixin

于其他面向对象语言不同,Ruby “有意”只提供单继承。不过 Ruby 拥有模块(在 Objective-C 里面叫做类别)。模块是把许多方法放在了一个类别里。

类可以混合一个模块,得到这个模块提供的所有方法。比如所有提供 each 方法的类可以混合 Enumerable 模块,来得到这个模块提供的所有方法,当然这些方法都会调用 each 做循环。

class MyArray
  include Enumerable
end

一般来说,Ruby 爱好者相对于复杂和限制颇多的多态继承方法来讲更偏向于这种混合方法。

Ruby 的面貌

尽管 Ruby 只用很少的符号并且偏向与英文单词做关键字,但是少量的符号也被用来装饰 Ruby。Ruby 不需要提前定义变量。它用简单的命名法来提示变量存在的范围。

  • var 可以是局部变量。
  • @var 是一个实例变量。
  • $var 是一个全局变量。

这些信号让程序员更清楚的看到每一个变量的角色,增强了程序的可读性,也不需要在实例变量前面加上 self. 了。

更上一层楼

Ruby 还有其他丰富的特性:

  • Ruby 有类似于 Java 和 Python 的异常处理,使处理错误更方便。
  • Ruby 有一个真正的表示-清扫(mark-and-sweep)垃圾手机器来出来所有的 Ruby 对象。不需要在库里维护引用数了。就像 Matz 说的:“这对您健康有意。”
  • 为 Ruby 写 C 的扩展比 Perl 和 Python 更容易。Ruby 有一个非常雅致的 API 从 C 语言调用 Ruby。这包括把 Ruby 作为嵌入式脚本语言时,从其他软件里调用 Ruby。SWIG 界面也是可选的。
  • Ruby 可以在操作系统允许的情况下动态调用库。
  • Ruby 提供不依赖操作系统的线程。所以在所有 Ruby 支持的操作系统里都可以使用多线程处理,不管操作系统支不支持,比如 MS-DOS!
  • Ruby 极为轻便:它只要是在 GNU/Linux 上开发的,但也在很多类型的 UNIX 上运行,也支持 Mac OS X, Windows 95/98/Me/NT/2000/XP,DOS,BeOS,OS/2 等。

参考资料

1 Matz, 在 Ruby-Talk 邮件列表, 5月12日, 2000.

2 查看更多信息在 Ruby on Rails 主页.

3 Matz, 在 Ruby 创造者的采访, 11月29日, 2001.

4 Matz, 在 Ruby 的代码块和闭合, 12月22日, 2003.




上一篇:Ruby运行环境搭建及简单使用   下一篇:Windows XP下搭建ruby on rails环境
·thinkphp框架在nginx环境下去掉index.php路径显(09-13)
·jQuery插件开发全解析(08-19)
·突破帖子标题的80字符限制 For Discuz!X 1.5(01-29)
·Z-Blog性能优化和评论IP显示(02-05)
·制作ASP脚本组件实现重启服务器(10-02)
·ASP.NET比拼PHP,谁是速度之王?(09-27)
·如何设置Response中的ContentType(06-22)
·ajax与seo(06-22)
·Ajax开发20问(06-22)
·异步加载,到底选择GET还是POST?(06-22)
·jQuery日常使用技巧总结(06-22)
·从用户体验与编程模型方面看AJAX与B/S(06-22)
·在JBOSS下发布Web程序(06-20)
·为Java Web应用程序增加入侵检测功能(06-20)
·如何使用JavaScript的事件代理(06-20)
·Javascript利用闭包循环绑定事件(06-20)
·用Javascript连接Access数据库的方法(06-20)
·如何优化JavaScript脚本的性能(06-20)
·JavaScript控制Excel打印完美解决方案(06-20)
·基于JavaScript的REST客户端框架(06-20)
·深入浅出谈Javascript API基本框架(06-20)
·Ajax优于JSF的几个原因讨论(06-20)
·Ajax模式之缓存控制器模式(06-20)
·AJAX推送与拉取方式的比较(06-20)
·Ajax, 选择GET还是POST?(06-20)
·RubyOnRail开发环境搭建详解 NetBean实现 (06-20)
·用Editplus搭建ruby编程环境(06-20)
·Windows下使用Apache2.2和Mongrel运行Ruby on R(06-20)
·Windows XP下搭建ruby on rails环境(06-20)
·Ruby是什么(06-20)
·Ruby运行环境搭建及简单使用(06-20)
·google.com 首页代码分析(06-17)
·JSP页面查询显示常用模式(06-09)
·十条PHP技巧来提升你的编程水平(06-09)
·探究PHP底层运行机制(06-09)
·php如何读取目录大小实列(文件夹所占空间)(06-09)
·Java编译器中对String对象的优化(05-08)
·Java究竟是传值还是传引用?(05-08)
·Java中静态数组与动态数组的区别(05-08)
·快速启动一个Java Web编程框架(05-08)
·浅谈Java中的编码理论(05-08)
·让Ruby性能增加30%的改进方法分析(05-07)
·详解ASP.NET的四种状态(05-06)
·浅谈三层结构与MVC模式的区别(05-06)
·在ASP.NET中使用PlaceHolder控件(05-06)
·作为ASP.NET开发人员必须养成的编程习惯(05-06)
·非常好用的asp备份还原SQL数据库代码(11-27)
·VBS脚本用WMI枚举Windows 2003系统所有服务及属(11-27)
·实现301重定向的asp代码(10-28)
·实现301重定向的php代码(10-28)
·php实现base64加密解密的代码(10-28)
·php随机跳转代码(10-28)
  新补天网,低调务实。宗旨是为大家搜集提供互联网各个方面的学习资料和技术文档,并为大家提供各种优秀的工具软件。我们也将不再拘泥于传统的网络安全分类,而是站在更高的角度去理解信息化的方方面面。