1.1Ruby编程语言的简单介绍

1.Ruby 发明者的理想

Ruby 是一个注重均衡的语言,它的发明者松本行弘(Yukihiro “Matz” Matsumoto),混合了他喜欢的多门语言(Perl、Smalltalk、Eiffel、Ada 和 Lisp),创造出了一种兼具函数式编程和命令式编程特色的新语言。

他常说,他是“试着让 Ruby 更自然,而不是更简单”,让一切符合生活常规。

除此之外,他还提到:

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

2.Ruby 的成长

自从 1995 年公开发布以来,Ruby 在全球吸引了许多忠实的程序员。2006 年,Ruby 得到广泛接受,各大城市都有活跃的用户组,以及 Ruby 相关的开发者大会。

在主要的邮件列表 Ruby-Talk 中,讨论 Ruby 语言的消息攀升到每日 200 封。近几年,消息数量有所下降,因为社区在不断变大,由一个集中的邮件列表分成了很多小型的讨论组。

Ruby 经常位于全球编程语言成长和流行度指数的前十名(比如TIOBE)。造成 Ruby 如此快速成长的原因很大程度上是因为使用 Ruby 编写的 Web 框架 Ruby on Rails 非常受欢迎。

Ruby 完全免费,除了不收费之外,还可以自由使用、复制、修改和分发。

3.把一切视为对象

最初,Matz 从其它语言中找寻理想的语法。回想他的研究,他说,“我想要一种比 Perl 更强大、比 Python 更面向对象的脚本语言”。

Ruby 中,一切皆对象。所有的信息和代码都拥有属性和行为。面向对象编程称属性为实例变量(instance variables),称行为为方法(methods)。 从下列代码可以看出,Ruby 能给数字赋于行为,从这一点可以证明,Ruby 是纯面向对象的语言。

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

在许多语言中,数字和其它基本类型都不是对象。而 Ruby 受 Smalltalk 语言影响,所有类型都可以赋予方法和实例变量。这一点让 Ruby 特别易于使用,因为适用于对象的规则适用于 Ruby 中的一切。

4.Ruby 的灵活性

Ruby 是一门相当灵活的语言,允许用户改变自身。 Ruby 的核心部分可以更改,也可以重新定义。此外,还可以在现有功能的基础上增加新功能。Ruby 不想阻碍程序员的创造力。

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

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

y = 5.plus 6
# y 现在等于 11

Ruby 的运算符只是语法糖 (syntactic sugar),随时可以重定义。

5.代码块:表现力强大的特性

Ruby 的代码块非常灵活。程序员可以给任何方法添加闭包,指明方法该如何工作。闭包也叫代码块,是从其他命令式语言(比如 PHP、Visual Basic 等)转到 Ruby 的初学者最喜欢使用的特性。

代码块取自函数式语言。Matz 说:“我希望在 Ruby 的闭包中融入 Lisp 的文化。”

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

在上述代码中,代码块使用 do ... end 结构表述。map 方法把代码块应用到单词列表上。Ruby 中有很多方法都留出了切入点,让程序员编写代码块,控制方法具体的操作细节。

6.Ruby 中的混入

与其他面向对象语言不同,Ruby“有意”只提供单继承。不过 Ruby 有模块(在 Objective-C 中叫做类别)。模块是一系列方法。

类可以混入模块,得到模块中的所有方法。例如,所有实现 each 方法的类可以混入 Enumerable 模块,得到这个模块提供的所有方法,当然这些方法都会调用 each 做循环。

class MyArray
  include Enumerable
end

一般来说,Ruby 高手认为这种方式比多重继承更简洁。多重继承复杂,而且可能有太多限制。

7.Ruby 的视觉呈现

尽管 Ruby 只用很少的符号,而且偏向使用英文单词做关键字,但是也用一些符号装饰 Ruby。在 Ruby 中,不需要提前声明变量。Ruby 使用简单的命名约定指明变量的作用域。

  • var 可能是局部变量
  • @var 是实例变量
  • $var 是全局变量

这些符号能让程序员轻易识别变量的作用。此外,实例成员前面无需加上烦人的 self.

8.更上一层楼

Ruby 还有其他众多特性,下面列举一些:

  • Ruby 的异常处理特性与 Java 和 Python 类似,易于处理错误。
  • Ruby 拥有一个针对所有对象的标识-清扫(mark-and-sweep)式垃圾回收程序)。使用者无需维护扩展库中的引用计数。正如 Matz 所说:“这对您的健康有益。”
  • 为 Ruby 写 C 扩展比 Perl 和 Python 容易,因为 Ruby 有一个非常雅致的 API,能从 C 语言中调用 Ruby。例如,调用软件中内嵌的 Ruby,当做脚本语言使用。此外,还有 SWIG 接口可用。
  • 如果操作系统允许,Ruby 可以动态加载扩展库。
  • Ruby 提供不依赖操作系统的线程。所以,不管操作系统是否支持,Ruby 支持的所有操作系统都可以使用多线程,甚至是 MS-DOS!
  • Ruby 高度可移植:它主要在 GNU/Linux 上开发,但也支持很多类型的 UNIX,以及 macOS,Windows,DOS,BeOS,OS/2 等。

9.Ruby 的其他实现

作为一门语言,Ruby 有不同的实现。本页讨论的是推荐的实现,社区通常称之为 MRI(“Matz’s Ruby Interpreter”)或 CRuby(因为是用 C 语言写的)。不过,还有一些别的实现。其他实现通常在特定的场合中有用,集成了其他语言或环境,或者有 MRI 不具有的特性。

下面列出一些其他实现:

  • JRuby 是基于 JVM(Java Virtual Machine)的 Ruby 实现,利用了 JVM 中优秀的 JIT 编译器、垃圾回收程序、并发线程、工具生态系统和大量的库。
  • Rubinius 是用“Ruby 编写的 Ruby”。构建于 LLVM 之上,Rubinius 跑在一个很灵活的虚拟机上,别的语言也可以构建于这个虚拟机上。
  • mruby 是 Ruby 语言的轻量级实现,可以链接或嵌入到程序之中。mruby 由 Ruby 的创建者松本行弘(Matz)领导开发。
  • IronRuby 是一个“与 .NET 框架紧密集成”的实现。
  • MagLev 是“一个快速、稳定的 Ruby 实现,支持集成对象持久化和分布式共享缓存”。
  • Cardinal 是一个“为 Parrot 虚拟机 (Perl 6)编写的 Ruby 编译器”。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubybasic/1410.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注