ruby入门之基本语法
文章目录
- 1.Ruby介绍
- 2.ruby 语法
- 1.helloWord!输出
- 2.方法
- 3.类和对象
- 4.查看对象里的方法
- 5.使用对象属性
- 6.数组的使用
- 7.备注的使用
- 8.三目运算式 ?:
- 9.字符串运算
- 10.引号的区别
- 11.hash 变量
- 12.类型转换
- 13.继承
- 15.module模块
- 16.条件控制
- 17.普通循环
- 17.特殊循环
- 18.例外处理
1.Ruby介绍
是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。
2.ruby 语法
1.helloWord!输出
puts "hello,word!"
输出:
hello,word!
2.方法
- 实例方法需要实例化
- 静态方法必须通过类名调用
cclass Playerattr_accessor :name,:agedef initialize(name="姓名",age="年龄")@name=name@age=ageenddef show()puts "实例方法调用......#{@name}"enddef self.show2puts "静态方法调用2......#{@name}"end
endaa=Player.new()
aa.show()
aa::show()Player.show2
Player::show2
输出:
实例方法调用…姓名
实例方法调用…姓名
静态方法调用2…
静态方法调用2…
3.类和对象
class Playerdef initialize(name="default")@name=nameenddef show()puts "player:#{@name}"end
endaa=Player.new()
aa.show()bb=Player.new("lisi")
bb.show()cc=Player.new("wangwu")
cc.show()
输出:
player:default
player:lisi
player:wangwu
注:initialize为构造函数,传入参数默认值为default
4.查看对象里的方法
- puts Player.instance_methods(false): 列出对象(类)内部的可用方法 ,传false打印自己定义的方法,true为这个类所有的方法
- respond_to?(“show”): 判断aa对象是否有show方法
- send(“show”): send执行对象的方法
class Playerdef initialize(name="default")@name=nameenddef show()puts "player.................................................:#{@name}"enddef show2()endendaa=Player.new()
aa.show()puts Player.instance_methods(false) #列出对象(类)内部的可用方法 ,传false打印自己定义的方法,true为这个类所有的方法
if aa.respond_to?("show") #判断aa对象是否有show方法aa.send("show") #send执行对象的方法
end
输出:
player…:default
show
show2
player…:default
5.使用对象属性
attr_accessor:定义可存取对象的属性 :name
class Playerattr_accessor :name,:agedef initialize(name="姓名",age="年龄")@name=name@age=ageenddef show()puts "player......#{@name}"puts "player......#{@age}"end
endaa=Player.new()
aa.show()puts "name is " +aa.respond_to?("name").to_s
puts "age is " +aa.respond_to?("age").to_saa.name="王五"
aa.age=18aa.show()
输出:
player…姓名
player…年龄
name is true
age is true
player…王五
player…18
假设上面未定义age( attr_accessor :name),则输出结果为
player…姓名
player…年龄
name is true
age is false
Traceback (most recent call last):
/Users/yuroupan/RubymineProjects/untitled/.idea/classtest.rb:20:in <main>': undefined method
age=’ for #<Player:0x00007fbb44046fa8 @name=“王五”, @age=“年龄”> (NoMethodError)
注:引用属性需要加:
6.数组的使用
games=["绝地求生","死亡大作战","4399"]
puts games#数组循环
# 方法1:
games.each do |game|puts "我爱#{game}"
end#方法2
games.each_with_index do |game,i|puts "#{i+1}.#{game}" #不+1就是下标从0开始
endputs games.join(",")
输出:
绝地求生
死亡大作战
4399
我爱绝地求生
我爱死亡大作战
我爱4399
1.绝地求生
2.死亡大作战
3.4399
绝地求生,死亡大作战,4399
7.备注的使用
- “#” 一行备注
- =begin…=end 多行备注
- _ END _这个符号之后的所有内容都为备注
8.三目运算式 ?:
puts point >30 ?"MVP":"player"
等价于
```ruby
if point >=30 thenputs "MVP球员"
elseputs "player"
end
9.字符串运算
- a<<b 字符串代入
- a*4 字符串循环
a="hello"
b="abc"puts a+" "+ba<<b
puts a #相当于a=a+b
puts ba="A"
puts a*4 #循环输出4个
输出:
hello abc
helloabc
abc
AAAA
10.引号的区别
单引号:直接输出
双引号:进行运算
puts "我是双引号\n"
puts '我是单引号\n'puts "#{20+30+40}"
puts '#{20+30+40}'
输出:
我是双引号
我是单引号\n
90
#{20+30+40}
11.hash 变量
mvp_rank={"lisi"=>28,"zhangsan"=>36,"wangwu"=>98
}
puts mvp_rank
puts mvp_rank["zhangsan"]#类似JSON的使用
player={name:"lisa",age:28,points:30.3
}
puts player
puts player[:name]+","+player[:age].to_s+","+player[:points].to_s
输出:
{“lisi”=>28, “zhangsan”=>36, “wangwu”=>98}
36
{:name=>“lisa”, :age=>28, :points=>30.3}
lisa,28,30.3
12.类型转换
-
字符to数值 to_i(字符转整数) to_f(字符转小数)
-
数值to字符 to_s
zhangsan="50"
lisi="29"
wangwu="36"
puts zhangsan+lisi+wangwu
puts zhangsan.to_i+lisi.to_i+wangwu.to_i
puts (zhangsan.to_i+lisi.to_i+wangwu.to_i).to_s+"总分"
puts zhangsan.to_i.to_f
输出:
502936
115
115总分
50.0
13.继承
class Son < Father
class Fatherdef initialize(name="姓名",age="年龄")@name=name@age=ageenddef show()puts "父类方法调用......#{@name}"enddef self.show1puts "父类静态方法调用2......#{@name}"end
endclass Son < Fatherdef show2()puts "子类方法调用......#{@name}"end
endlisi=Father.new("lisi",25)
lisi.show()zhangsan=Son.new("zhangsan",9)
zhangsan.show2
zhangsan.show
Son.show1
输出:
父类方法调用…lisi
子类方法调用…zhangsan
父类方法调用…zhangsan
父类静态方法调用2…
15.module模块
定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用。
module BaseFuncVersion = "0.0.1"def vreturn Versionend#普通方法def add(a,b)return a+bend#静态方法def self.showversionreturn Versionend#把V方法定义范围静态方法module_function :v
endputs BaseFunc::Version
puts BaseFunc::showversion
puts BaseFunc.showversion
puts BaseFunc.v#定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用
class BaseClassinclude BaseFunc
endputs "-----------------------------"
puts BaseClass::Version
#puts BaseClass.add(10,20) add方法需通过实例化对象来调用aa=BaseClass.new
puts aa.add(10,20)
#BaseClass.showversion self方法是模块自己的,无法include进类
输出:
0.0.1
0.0.1
0.0.1
0.0.1
0.0.1
30
16.条件控制
- if else
- unless
- case…when
#1.if else
#2.unless使用
price = 40
unless price < 50puts "aaa"
elseputs "bbb"
end#3case...when使用
week_day = 0case week_daywhen 0,7
puts "星期一"
when 1puts "星期一"
when 2puts "星期二"
when 3puts "星期三"
when 4puts "星期四"
when 5puts "星期五"
when 6puts "星期六"
when 7puts "星期七"
elseraise Exception.new("没这天")
end
输出:
bbb
星期一
17.普通循环
- for…in
- while
- until
#1.数组循环输出
gamelist=["aaa","bbb","ccc"]
for game in gamelist doputs game
end#2.循环1-4
for num in 1...5 doputs num
end#3.循环1-5
for num in 1..5 doputs num
end#4.while 循环
index=0
while index < 5 doputs "while.index=" + index.to_sindex+=1
end#5.until
index=0
until index == 5 doputs "until.index="+ index.to_sindex+=1
end
输出:
aaa
bbb
ccc
1
2
3
4
1
2
3
4
5
while.index=0
while.index=1
while.index=2
while.index=3
while.index=4
until.index=0
until.index=1
until.index=2
until.index=3
until.index=4
17.特殊循环
- each
- times
- step
- updo
- downto
#1.each循环
gamelist=["aaa","bbb","ccc"]gamelist.each {|game|puts game
}gamelist.each do |game|puts game
endgamelist.each_with_index do |game,i|puts i.to_s + "." +game
end#2.times循环
5.times do |i|puts "第 #{i+1} 次times循环"
end#3.step 循环 从1开始到10,每次增加31.step(10,3) do |i|puts "#{i}"end# 4.uoto
2.upto(5) do |i|puts "upto= " + i.to_s
end# 5.downto
5.downto(2) do |i|puts "downto= " + i.to_s
end
输出:
aaa
bbb
ccc
aaa
bbb
ccc
0.aaa
1.bbb
2.ccc
第 1 次times循环
第 2 次times循环
第 3 次times循环
第 4 次times循环
第 5 次times循环
1
4
7
10
upto= 2
upto= 3
upto= 4
upto= 5
downto= 5
downto= 4
downto= 3
downto= 2
18.例外处理
begin…rescue…ensure…end
类似try…catch…finally
begin#可能会发生错误的处理(try)puts "处理开始。。。"10/0
rescue => e#错误发生时(catch)puts "错误发生!!!"puts e
elseputs "正常处理。。。"
ensure#最后处理,无论是否发生处理事件均输出(finally)puts "最后的扫尾工作。。。"
end
输出:
处理开始。。。
错误发生!!!
divided by 0
最后的扫尾工作。。。