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是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与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,则可专门补全本文件以及关联文件中的
全局变量,
perl与
php亦有此优点。
已经定义的类可以在运行时修改
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
优点
语法简单
错误处理功能
动态载入(取决于系统架构)
可移植性高.不仅可以运行在多数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名字的由来
分享到:
相关推荐
PythonBasics 中文系列教程
Ruby-basics_2
CVI BASICS I COURSE LabWindows的基础教程
ffmpeg basics ffmpeg basics ffmpeg basics ffmpeg basics ffmpeg basics
You'll enter at Ruby's language basics and work through progressively advanced Ruby features such as classes, inheritance, and blocks. As your Ruby skills grow, you'll tackle deep topics such as ...
nim-basics:Nim基础教程的源文件
PythonBasics 中文系列教程【ApacheCN 翻译】
AsGamer-Basics1 AsGamer 基础教程
PP068 CUDA C Basics 基础教程。供新手入门学习使用。 English version. 也可以制作课件时参考。
2.2 Basics of the Relational Model 2.2.1 Attributes 2.2.2 Schemas 2.2.3 Tuples 2.2.4 Domains 2.2.5 Equivalent Representations of a Relation 2.2.6 Relation Instances 2.2.7 Keys of ...
Javascript和Ruby实践这是一个具有一些基本实践的文件。 我的目标是完成用JavaScript编写的代码挑战,并将其转移到ruby,反之亦然。 在时间上,挑战将从轻松到专家级别不等。技术:
MPLS BasicsMPLS Basics
FFmpeg Basics
Python Basics with Numpy Python Basics with Numpy Python Basics with Numpy
LabWindows CVI BASICS I & II 英文版的都是
Stepper Motor Basics
[Syngress] 云计算 基础教程 (英文版) [Syngress] The Basics of Cloud Computing (E-Book) ☆ 图书概要:☆ As part of the Syngress Basics series, The Basics of Cloud Computing provides readers with an ...
这是一个简单的教程,可在大约30分钟到一个小时的时间内学习SASS基础知识。 基于正式的指南,但有点冗长。 什么是SASS? SASS代表语法很棒的样式表。 它是CSS的“预处理器”。 基本上,它允许您以非常简单,方便的...
MATLAB.by.Example.Programming.Basics matlab基础教程 通过案例学习matlab