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名字的由来
分享到:
相关推荐
Ruby是一种面向对象的、动态类型的编程语言,以...这个资源可能包含一系列教程、示例代码、练习和解答,旨在逐步引导你掌握Ruby的基础知识。无论你是初学者还是希望巩固基础的开发者,这个资料都是一个宝贵的参考资料。
这是一个简单的教程,可在大约30分钟到一个小时的时间内学习SASS基础知识。 基于正式的指南,但有点冗长。 什么是SASS? SASS代表语法很棒的样式表。 它是CSS的“预处理器”。 基本上,它允许您以非常简单,方便的...
标题 "sinatra-hello-world-basics-onl01-seng-ft-090820-master.rar" 提供的信息表明,这是一个关于Sinatra框架的基础教程项目,可能包含了一个在线课程或者工作坊的内容,时间可能是在2009年8月20日。Sinatra是一...
在Ruby社区中,这种命名方式可能表示"Ruby Basic 101"或"Ruby Basics for the 101st time",暗示这是一个面向初学者的教程或学习资源。下面我们将深入探讨Ruby编程语言的关键知识点。 Ruby是一种面向对象的、动态...
标题“scala-basics:面向只懂动态语言的Scala学习者的资源”意味着这个压缩包文件包含了一系列专门为动态语言背景的学习者设计的Scala基础教程和资源。这些资料可能包括代码示例、解释性文档、练习和教学视频,旨在...
物件导向基础 描述 本实验将逐步指导您完成编写简单Book类的基础知识。 完成本教程后,您应该足够了解自己解决类似的面向对象问题。 指示 继续阅读本教程。 完成后,通过spec/01_book_spec.rb进行测试。 通过在...
"Java程序设计基础教程"适合初学者,涵盖了基本语法和面向对象编程的基础。 "Java distribute computing 15天学会jQuery"涵盖了分布式计算和前端框架jQuery,展示了如何在Java环境中利用jQuery进行高性能的Web开发...
类常量的对象定向基础目标了解什么是类常量使用类常量知道何时使用attr_accessor VS自己创建方法描述之前,我们了解了如何使类的每个单独实例都保留有关其自身的信息。 Book对象( Book类的实例)知道自己的标题,...
具有类常量的对象定向基础 目标 了解什么是类常量 使用类常量 知道何时使用attr_accessor VS自己创建方法 描述 之前,我们看到了如何使类的每个单独实例都保留有关其自身的信息。 Book对象( Book类的实例)知道自己...
- **Mongo Usage Basics**:基础用法介绍。 - **Server-Side Processing**:服务器端处理技术。 #### 28. **Home** - MongoDB 官方文档的首页,提供了导航到其他章节的入口。 - **知识点**: - **Introduction**...
MongoDB使用基础(Mongo Usage Basics)** 这部分内容涵盖了MongoDB的基本操作和使用场景,适合刚刚接触MongoDB的用户快速入门。 ### **46. 服务器端处理(Server-Side Processing)** 服务器端处理是MongoDB提供...
29. **MongoDB使用基础知识**(Mongo Usage Basics):这部分可能会提供一些基本的操作指南,包括如何安装MongoDB、启动服务、创建数据库和集合等。这对于初学者来说非常有用。 30. **快速入门**(Quickstart):这...