小百科  > 所属分类  >  编程语言   
[1] 评论[0] 编辑

Ruby

目录

简介编辑本段

    Ruby是一种面向对象、指令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本计算机科学家松本行弘(Matz)设计并开发。遵守BSD许可证和Ruby License。它的灵感与特性来自于perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的Ruby语言替代品。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
Ruby语言Ruby语言

基本信息编辑本段

软件名称    Ruby
软件平台    Windows、Linux、UNIXmacos
上线时间    1995年
编程范型    面向对象、指令式、函数式
设计者    松本行弘
最近更新时间    2021年7月7日
类型系统    动态类型
开发商    Yukihiro Matsumoto
许可证    Ruby许可证/ BSD许可证/ GNU通用公共许可证第二版
网站    www.ruby-lang.org
稳定版本    3.0.2
软件大小    18.6 MB

历史编辑本段

    Ruby的作者--松本行弘于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。之所以称为Ruby是取法自Perl,因为Perl的发音与6月的诞生石pearl(珍珠)相同,Ruby选择以7月的诞生石ruby(红宝石)命名。
    Ruby相较之下比其他类似的编程语言(如Perl或Python)年轻,又因为Ruby是日本人发明的,所以早期的非日文资料和程序都比较贫乏,在网上仍然可以找到早期对Ruby的资料太少之类的批评。约于2000年,Ruby开始进入美国,英文的资料开始发展。
    2004年,Rails框架诞生,Ruby更加广为人知,Ruby并于2006年为TIOBE获选为年度编程语言。

Ruby的理念编辑本段

    减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计Ruby语言的Matz的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须强调人性化,而不是一味从机器的角度设想。
    “人们特别是电脑工程师们,常常从机器着想。他们认为:“这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。”实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他们是仆人。
    遵循着最小惊讶原则,Ruby语言通常非常直观,按照编程人认为它应该的方式运行。
    Ruby的作者认为Ruby > (Smalltalk + Perl) / 2,表示Ruby是一个语法像Smalltalk一样完全面向对象、脚本运行、又有Perl强大的文字处理功能的编程语言。

Ruby的版本体系编辑本段

    Ruby版本号的构成形式是(MAJOR).(MINOR).(TEENY),均为只有1位的整数;如“1.8.6”、“1.9.3”。
    1.9版系统的TEENY不小于1时为稳定版,TEENY为0的版本是开发版。在1.9之前的版本中偶数MINOR代表稳定版,奇数MINOR代表开发版。

Ruby的Hello World程序编辑本段

    下面是一个在标准输出设备上输出Hello World的简单程序:
#!/usr/bin/env rubyputs "Hello, world!"

    或者是在irb交互式命令行的模式下:
>>puts "Hello, world!"Hello, world!=> nil

Ruby的特点编辑本段

变量与函数的命名规则

    乍看之下与Perl的命名规则有些类似,不过Perl的命名用来区分标量、数组与映射;而Ruby的命名规则用来表示变量与类别的关系。Ruby的变量有以下几种:
  • 一般小写字母、下划线开头:变量(Variable)。
  • $开头:全局变量(Global variable)。
  • @开头:实例变量(Instance variable)。
  • @@开头:类变量(Class variable)类别变量被共享在整个继承链中
  • 大写字母开头:常量(Constant)。
    有些函数则会加一个后缀,用来表示函数的用法,跟变量命名规则不同,函数的命名规则只是习惯,不具强制性,即使你不照规则命名也不影响程序运作
    =结尾:赋值方法,相当于其他编程语言的set开头的方法,算是一种语法糖。
    !结尾:破坏性方法,调用这个方法会修改本来的对象,这种方法通常有个非破坏性的版本,调用非破坏性的版本会回传一个对象的副本。
    ?结尾:表示这个函数的回传值是个布尔值。

多种字符串表示法

    Ruby提供了多种字符串的表示方法,方便撰写有大量文字资料的程序。除了来自C语言的引号表示法之外,还有来自于Perl的百分号字面量记法,以及方便书写大量内容的Heredoc记法。Ruby可以方便地以#{variable_name}的方式向字符串中插入变量。
    a = '\n这是一个单引号的字符串,反斜线和变量插值不会被转义'
    b = %q{这是一个不可转义的字符串}
    c = "\n这是一个双引号的字符串,反斜线和变量插值会被转义\n#{a}"
    d = %Q{\n這是一個常量字串,特殊内容同样会被转义\n}
    e = <<BLOCK
    这是一个以Heredoc方式书写的常量字符串,可转义,结尾标志不可缩进
    BLOCK
    f = <<-BLOCK
      这是一个可以缩进的Heredoc字符串
    BLOCK
    g = <<~BLOCK
      这是一个可以缩进的Heredoc字符串
      缩进会被自动去掉,在2.3版本中引入
    BLOCK
    h = %/\t这是一个可转义的的字符串\n/

动态修改对象及类别

    Ruby是动态语言,你可以在程序中修改先前定义过的类别。 也可以在某个类别的实例中定义该实例特有的方法,这叫做原型方法(prototype)。
class MyClass  def the_method    "general method"  endendmc = MyClass.newdef mc.the_method  "special for this instance."endmc.the_method

强大的反射机制与元编程

    Ruby的反射功能相当惊人,甚至可以自行追踪程序运作,或是取出private变量、拦截方法的调用。 常常与‘可以动态的修改对象’这项特色结合,做为‘元编程’的功能:程序在运行时, 可以由程序员提供的信息,自行生成、修改类别或对象,这项功能大大的提高了撰写代码的效率。 在Rails之中,就大量使用了这种特性。
    以下为用Rails使用元编程的示例:
class Project < ActiveRecord::Base  belongs_to :portfolio  has_one    :project_manager  has_many   :milestonesend

    在这个例子中,Project类别继承Base类别,Base类别内置的belongs_to、has_one、has_many方法,便会根据参数来修改Project类别的内容,并自行创建其他相关的方法。程序员可以更专心处理程序的运作,而不必为每个类别重复得撰写代码。
丰富灵活的循环表示
# 使用 for,在 1 到 3 取出值 1、2、3 到 outer_i 裡操作。for outer_i in 1..3 do  puts "for: #{outer_i * 100}"end# 在 1 到 3 的集合裡針對每個值,放到 i 裡操作。(1..3).each do |i|  puts "each: #{i * 100}"end# 只要符合 outer_i 小於等於 300,則進入迴圈。outer_i = 100while outer_i <= 300  puts "while: #{outer_i}"  outer_i += 100end# 直到 outer_i 大於 300 前,都可以進入迴圈。outer_i = 100until outer_i > 300  puts "until: #{outer_i}"  outer_i += 100end# 無限迴圈,用 break 來打斷迴圈。outer_i = 100loop do  break if outer_i > 300  puts "loop: #{outer_i}"  outer_i += 100end# 作 3 次迴圈,i 從 0 開始遞增 1。3.times do |i|  puts "times: #{(i + 1) * 100}"end# 從 1 遞增 1 到 3,值傳入 i 來操作。1.upto(3) do |i|  puts "upto: #{i * 100}"end# 從 3 遞減 1 到 1,值傳入 i 來操作。3.downto(1) do |i|  puts "downto: #{400 - i * 100}"end# 從 100 開始以每步 +100 邁向 300。100.step(300, 100) do |i|  puts "step: #{i}"end

其他特色

  •     完全面向对象:任何东西都是对象,没有基础类型
  •     变量是动态类型。
  •     任何东西都有值:不管是四则运算、逻辑表达式还是一个语句,都有回传值。
  •     运算符重载
  •     垃圾回收
  •     强类型
  •     变量无需声明
  •     在Windows上,加载DLL

比较与批评编辑本段

让人意外之处

    在Ruby中,只有false和nil表示false,其它的所有值都表示true(包括0、0.0、""、[])。这点和C语言的‘用0代表false’不同。
    Ruby的字符串是可改变的,这与Java固定不变的字符串不同。在Ruby中,常用Symbol对象来表示不可变的字符串。Ruby 2.3提供了默认冻结字符串的选项,在源码开头添加魔术注释# frozen_string_literal: true可以打开这个选项,当用户试图更改String对象时会抛出运行时异常。同时,松本行弘表示,在Ruby 3中,字符串将是默认不可变的。
    Ruby的继承功能相当脆弱,尽管Ruby是一个面向对象语言,Ruby内的许多规则,却使得子类有可能不小心就改写了父类的功能,在《The Ruby Programming Language》一书中,建议除非程序员对一个类别相当了解,否则尽可能不要使用继承。

和Perl 6比较

    CPAN上排名第一名,同时也是Perl 6的开发者的唐凤(Autrijus / Audrey)说:“Ruby就是‘没有到处打广告的Perl 6’”。
    松本行弘在接受欧莱礼(O'Reilly)访问时,提到“Ruby借用了很多perl的东西……,Python远比Perl要少……”、“我认为Ruby这个名字作为Perl之后的一门语言的名字真是再恰当不过了。”
    Perl之父拉里·沃尔(Larry Wall)说:“很多方面上我还是很喜欢Ruby的,这是因为那些部分是从Perl借过去的。:-)”、“我还喜欢Ruby的C<*>一元星号操作符,所以我把它加到Perl 6里面。”


附件列表


1

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

如果您认为本词条还有待完善,请 编辑

上一篇 UNIX    下一篇 Linux

同义词

暂无同义词