`
universsky
  • 浏览: 92306 次
文章分类
社区版块
存档分类
最新评论

Ruby Basics 基础教程

 
阅读更多
Ruby Basics 基础教程
class Person
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
end
people = Person.new('Daysi','female',19)
puts people.name
puts people.gender
puts people.age
===========================================\\\\
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\cWX166129>ruby
print "Hello Jack"
^D
Hello Jack
C:\Users\cWX166129>irb
irb(main):001:0> print "Hello World"
Hello World=> nil
C:\Users\cWX166129>ruby testClass.rb
testClass.rb:11:in `<main>': undefined method `name' for #<Person:0x15b43d8 @nam
e="Daysi", @gender="female", @age=19> (NoMethodError)
============================
class Person
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
def name
@name
end
def gender
@gender
end
def age
@age
end
end
people1 = Person.new('Rose','female',19)
puts "****************"
puts people1.name
puts people1.gender
puts people1.age
puts "****************"
people2 = Person.new('Jack','Male',21)
puts people2.name
puts people2.gender
puts people2.age
============================
类的定义 类是对具有同样属性和同样行为的对象的抽象,Ruby中类的声明使用class关键字。定义类的语法如下, class ClassName
def method_name(variables)
#some code
end
end
类的定义要在class…end之间,在上面的格式中,ClassName是类名,类名必须以大写字母开始,也就是说类名要是个常量。
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\cWX166129>ruby
print "Hello Jack"
^D
Hello Jack
C:\Users\cWX166129>irb
irb(main):001:0> print "Hello World"
Hello World=> nil
C:\Users\cWX166129>ruby testClass.rb
testClass.rb:11:in `<main>': undefined method `name' for #<Person:0x15b43d8 @nam
e="Daysi", @gender="female", @age=19> (NoMethodError)
C:\Users\cWX166129>ruby testClass.rb
****************
Rose
female
19
****************
Jack
Male
21
Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada 以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java 平台)、IronRuby(.NET 平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
Ruby语言的发明人是日本人松本行弘(Matsumoto Yukihiro),大家亲切的称呼他"Matz"。 可能会出乎大家的意料,Ruby并不是一种近年来才诞生的语言,它的历史可以追溯到1993年,Ruby之父Matz开始对脚本语言感兴趣。在通过一些分析和思考之后,Matz认为脚本语言是可以变得很强大和灵活的,于是他准备把脚本语言作为他的发展方向。 和很多人一样,Matz是一个面向对象程序设计的fans,自然而然他想研究一种支持面向对象程序设计的脚本语言。随后的一段时间,他到网络上搜集了一些相关的资料,并且发现了Perl 5,当时Perl 5还没有发布。通过一段时间了解后,Matz.发现Perl 5这并不是他想的东西,所以他放弃了把Perl当作一个面向对象的脚本语言使用的念头。随后Matz转向了Python,Python是一个解释型的、面向对象语言,但是Matz发现Python并不能完全算作“面向对象”语言。Matz认为Python是面向对象和过程化程序设计语言(Procedural Programming Language)的混合产物。Matz希望找到的是一种比Perl更强大、比Python更面向对象的语言,但是很遗憾, 这样的语言当时在地球上并不存在。于是Matz打算自己设计一个全新的编程语言。1993年2月24日是一个值得纪念的日子,在这一天Ruby诞生了。 1995年12月Matz推出了Ruby的第一个版本Ruby 0.95。 在1996年以前,都是Matz.一个人在开发进行Ruby的开发。后来随着Ruby社区的渐渐形成,很多社区成员给了Matz许多有意义的帮助,包括提交bug和patch等。现在,Ruby像其他开源项目一样,有自己的开发团队,任何有能力的个人或团体都可以参与Ruby的开发与进化。

理念

减少编程时候的不必要的琐碎时间,令编写程序的人高兴,是设计 Ruby 语言的 Matz 的一个首要的考虑;其次是良好的界面设计。他强调系统设计必须注重人性化,而不是一味从机器的角度设想。
“ 人们特别是电脑工程师们,常常从机器着想。他们认为:‘这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。’实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他们是仆人。 ”
遵循上述的理念,Ruby 语言通常非常直观,按照编程人认为它应该的方式运行。
Ruby 是完全面向对象的:任何一点数据都是对象,包括在其他语言中的基本类型(比如:整数,布尔逻辑值),每个过程或函数都是方法。
下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
#!/usr/bin/env ruby
puts "Hello, world!"

特点

在Ruby语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数
变量没有类型
Ruby的变量可以保有任何类型的数据。
任何东西都有值
不管是数学或者逻辑表达式还是一个语句,都会有值。
Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。 若您曾经“想要一种简单的面向对象的语言”,或者认为“Perl的功能虽然好用,但它的语法真让人受不了”,又或者觉得“LISP系列语言的思想不错,但到处都是括号真让人讨厌,最起码算式应该按照通常的样式书写”。那么,Ruby或许能让您满意。
归纳起来,Ruby有以下优点: 
解释型执行,方便快捷
Ruby是解释型语言,其程序无需编译即可执行。 
语法简单、优雅 语法比较简单,类似Algol系语法。 
完全面向对象 Ruby从一开始就被设计成纯粹的面向对象语言,因此所有东西都是对象,例如整数等基本数据类型。 
内置正则式引擎,适合文本处理 Ruby支持功能强大的字符串操作和正则表达式检索功能,可以方便的对字符串进行处理。 
自动垃圾收集 具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。不需要用户对内存进行管理。 
跨平台和高度可移植性 Ruby支持多种平台,在Windows, Unix, Linux, MacOS上都可以运行。Ruby程序的可移植性非常好,绝大多数程序可以不加修改的在各种平台上加以运行。 
有优雅、完善的异常处理机制 Ruby提供了一整套异常处理机制,可以方便优雅地处理代码处理出错的情况。
 拥有很多高级特性 Ruby拥有很多高级特性,例如操作符重载、Mix-ins、特殊方法等等,是用这些特性可以方便地完成各种强大的功能。
类与对象 Ruby是一种真正的面向对象程序设计语言,面向对象指以对象为中心的理论体系。 
封装(Encapsulation) 将内部结构和算法隐藏起来,以确保只有特定的过程(也叫方法)才能直接操作数据,其结果是不能从外部直接使用数据构造,同时一旦内部构造发生变化也不会对外界造成不良影响。这种隔离方法就叫做封装。 
继承 
多态(Polymorphism)
根据对象的不同选择合适的操作。在Ruby中的实现方法是,根据被调的对象的不同来选择不同的方法。 虽然有很多语言都宣称自己是面向对象的,但是他们往往对面向对象的解释都一样,大多是以自己特有的方式来解释什么是面向对象,而在实际情况中,这些面向对象语言又采用了很多非面向对象的做法。
以 Java 为例:如果你想取一个数字取绝对值,java 的做法是:
int num = Math.abs(-99);
也就是将一个数值传递给 Math 类的一个静态函数 abs 处理。为什么这么做?因为在 java 中,数值是基本类型不是类。
而在 Ruby 中,任何事物都是对象,也就是说,数字–99就是对象,取绝对值这样的操作应该属于数字本身,所以Ruby的做法就是:
c = -99.abs
在Ruby中,你所操作的一切都是对象,操作的结果也是对象。

规则

[4] Ruby的变量有一定的规则,以$开头的一定是全局变量,以@开头的都是实例变量,而以@@开头的是类变量。常数则以大写字母开头;这种方法,对文本编辑器的命令补全很有帮助,如在vim下先键入$及开头字母,再敲击Ctrl+p,则可专门补全本文件以及关联文件中的全局变量perlphp亦有此优点。
已经定义的类可以在运行时修改
Ruby是动态语言,你可以在程序中修改先前定义过的类。 也可以在某个类的实例中定义该实例特有的方法,这叫做单例方法。
class MyClass
def the_method
"general method"
end
end
mc = MyClass.new
def mc.the_method
"special for this instance."
end
mc.the_method #special for this instance
使用Ruby可以写出简短而又功能强大的代码
#下面的方法用来完成两个矩阵的乘积
def matrix_mul(matrix1,matrix2)
result=[]
(0...matrix1.length).each {|i|
temp=[]
(0...matrix2[0].length).each { |j|
tmp=0
(0...matrix1[0].length).each { |k|
tmp+=matrix1[i][k]*matrix2[k][j]
}
temp<<tmp
}
result<<temp
}
return result
end
注:ruby标准库中已包含矩阵库 Matrix

优点

语法简单
普通的面向对象功能(类,方法调用等)
特殊的面向对象功能(Mixin,特殊方法等)
错误处理功能
动态载入(取决于系统架构)
可移植性高.不仅可以运行在多数UNIX上,还可以运行在DOS,Windows,Mac,BeOS等平台上
适合于快速开发,一般开发效率是JAVA的5倍

使用fxri Fxri是一个Ruby交互帮助和控制台工具。它不仅可作为语言的在线帮助,而且可以用作 交互式Ruby解释器来执行程序。对于学习Ruby语言,fxri是一个非常方便的帮手。 不知你有没有听说过Fox ToolKit,它是相当轻巧的开放源代码的图形库。FXRuby是RubyForge上的一个项目,提供了Ruby语言使用Fox ToolKit的接口。而Fxri正是基于FXRuby开发,Fxri同样是RubyForge上的项目。这样你应该可以猜到Fxri名字的由来
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics