Ruby是一种功能强大的面向对象的脚本语言,可以使用它方便快捷地进行面向对象程序设计。与Perl类似,而且Ruby具有强大的文本处理功能,使文本处理变得简单。此外还可以方便地使用C语言来扩展Ruby的功能。
Ruby被称为 “最快的开发语言” ,初步了解,Ruby有以下特点:
Ruby是解释型语言,其程序无需编译即可执行。
语法比较简单,类似Algol系语法。
Ruby从一开始就被设计成纯粹的面向对象语言,因此所有东西都是对象,例如整数等基本数据类型。
Ruby支持功能强大的字符串操作和正则表达式检索功能,可以方便的对字符串进行处理。
具有垃圾回收(Garbage Collect,GC)功能,能自动回收不再使用的对象。不需要用户对内存进行管理。
Ruby支持多种平台,在Windows, Unix, Linux, MacOS上都可以运行。Ruby程序的可移植性非常好,绝大多数程序可以不加修改的在各种平台上加以运行。
Ruby提供了一整套异常处理机制,可以方便优雅地处理代码处理出错的情况。
Ruby拥有很多高级特性,例如操作符重载、Mix-ins、特殊方法等等,是用这些特性可以方便地完成各种强大的功能。
(如此功能强大且方便快捷的语言,自己居然听都没听过!罪过罪过!赶紧学起来!)
注:推荐使用vs code为IDE(幸好以前使用vue的时候把vs code用熟了,嘻嘻)
官网:http://www.ruby-lang.org/zh_cn/
在官网下载最新版或者稳定的版本即可~
安装完之后,在cmd里面输入查看版本
ruby -v
进入ruby的irb交互命令控制台(做一些简单的调试或运算)
irb
10+20
#开平方
Math.sqrt(9)
Ruby的文件后缀为“.rb”,就像java的后缀是“.java”一样
新建一个文件“hello world.rb”,输入
puts "我是Ruby,hello world"
然后在控制台运行这个文件:
ruby hello world.rb
使用def 和 end 作为函数的起始标志
def sayHello
puts "hello world."
end
在函数声明的地方加上参数即可(与js有点类似)
def sayHello(name)
puts "Hello #{name}."
end
此时如果调用函数的时候没有传参,会报这样一个错:
正确的调用:
sayHello("world")
只需要在参数的部分给它写上默认值,调用的时候如果不传参就使用默认值。如果传参就是用传过来的参数
def sayHello(name="world")
puts "Hello #{name}."
end
如此一来,就算调用的时候只是写了“sayHello”,也不会报错,而是输出“Hello world.”
Ruby跟java一样,作为一个面向对象的语言,并非单身狗,也是有对象滴!~
上面的例子直接在文本中写的函数和调用,没有类体,下面我们建一个类,然后进行调用:
#Player类(我觉得这个类似java的内部类,暂时这样写,后面理解后再修改)
class Player
#有参构造
def initialize(name = 'Koma')
@name = name
end
#方法
edf show()
puts "palyer: #{@name}"
end
end
#实例化这个类,建对象,传入实例变量的值
Kamo = Player.new()
Kamo.show()
#传入参数
curry = Player.new("Curry")
cuury.show()
harden = Player.new("Harden")
harden.show()
instance_methods(all:boolean) :列出对象(类)内部的方法
respond_to:调查对象的方法/属性是否可用
send:执行对象的方法
这三个方法的用处:
#传入false就只看自己写的方法,如果传true就会打印出很多方法,暂时用不到
puts xxx.instance_methods(false)
在需要用到某方法的时候,先使用respond_to判断方法是否可用
然后判断可用的情况下,再使用send方法进行方法的调用
#一般都会先判断方法是否可用再执行,因此常使用在if判断里面
全部代码:
#建一个游戏类
class Game
#有参构造器
def initialize(title = "怪物猎人世界", price = 200)
@title = title
@price = price
end
#写一个show()方法,输出实例变量的内容
def show()
puts "标题:#{@title}"
puts "价格: #{@price}"
end
#另外写两个方法,看看到时候能不能识别出来
def show2()
end
def show3()
end
end
#使用instance_methds方法查看Game类里面有哪些方法
puts Game.instance_methods(false)
#最后输出结果是:
#show()
#show2()
#show3()
#实例化一个对象,为超级马里奥
mario = Game.new("超级马里奥", 350)
if mario.respond_to("show")#判断是否存在show这个方法
mario.send("show")#如果存在这个方法,则执行这个方法
end
#因为存在这个方法,因此成功执行
attr_accessor方法可以开启某个属性的修改权限,类似于java中的public
attr_accessor :price, :title
在类中的构造函数中定义两个实例变量,然后用attr_accessor开启这两个属性,然后在下面进行修改,输出结果(类似加上public)
class Game
#attr_accessor :price #一开始只开放price
#为这两个属性开启public
attr_accessor :title, :price
#定义有参构造,声明两个属性
def initialize(title = "怪物猎人世界", price = 200)
@title = title
@price = price
end
#定义show方法
def show()
puts "#{@title}"
puts "#{@price}"
end
end
#实例化一个游戏
myGame = Game.new()
myGame.show()
#在这里判断属性是否可用,使用上面的respond_to方法
puts myGame.responds_to("title").ti_s
puts myGame.responds_to("price").ti_s
#因为使用attr_accessor方法开放了这两个属性,因此此处toString方法输出两个true
#既然可以修改,我们就可以修改并使用了
myGame.title = "Super Mario World"
myGame.price = 150
myGame.show()
#属性被修改成功,输出新的值