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 Player
  attr_accessor :name,:age
  def initialize(name="姓名",age="年龄")
    @name=name
    @age=age
  end
  def show()
    puts "实例方法调用......#{@name}"
  end

  def self.show2
    puts "静态方法调用2......#{@name}"
  end
end

aa=Player.new()
aa.show()
aa::show()

Player.show2
Player::show2

输出:
实例方法调用…姓名
实例方法调用…姓名
静态方法调用2…
静态方法调用2…

3.类和对象
class Player
  def initialize(name="default")
    @name=name
  end
  def show()
      puts "player:#{@name}"
  end
end

aa=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 Player
  def initialize(name="default")
    @name=name
  end
  def show()
      puts "player.................................................:#{@name}"
  end
  def show2()
  end

end

aa=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 Player
  attr_accessor :name,:age
  def initialize(name="姓名",age="年龄")
    @name=name
    @age=age
  end
  def show()
      puts "player......#{@name}"
      puts "player......#{@age}"
  end
end

aa=Player.new()
aa.show()

puts "name is " +aa.respond_to?("name").to_s
puts "age is " +aa.respond_to?("age").to_s

aa.name="王五"
aa.age=18

aa.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

': undefined methodage=’ for # (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开始
end

puts games.join(",")

输出:
绝地求生
死亡大作战
4399
我爱绝地求生
我爱死亡大作战
我爱4399
1.绝地求生
2.死亡大作战
3.4399
绝地求生,死亡大作战,4399

7.备注的使用
  • “#” 一行备注
  • =begin…=end 多行备注
  • _ END _这个符号之后的所有内容都为备注
8.三目运算式 ?:
puts point >30 ?"MVP":"player"

等价于

```ruby
if point >=30 then
  puts "MVP球员"
else
  puts "player"
end
9.字符串运算
  • a<
  • a*4 字符串循环
a="hello"
b="abc"

puts a+" "+b

a<<b
puts a    #相当于a=a+b
puts b

a="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 Father
  def initialize(name="姓名",age="年龄")
    @name=name
    @age=age
  end
  def show()
    puts "父类方法调用......#{@name}"
  end
  def self.show1
    puts "父类静态方法调用2......#{@name}"
  end
end

class Son < Father
  def show2()
    puts "子类方法调用......#{@name}"
  end
end

lisi=Father.new("lisi",25)
lisi.show()

zhangsan=Son.new("zhangsan",9)
zhangsan.show2
zhangsan.show
Son.show1

输出:
父类方法调用…lisi
子类方法调用…zhangsan
父类方法调用…zhangsan
父类静态方法调用2…

15.module模块

定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用。

module BaseFunc
  Version = "0.0.1"

  def v
    return Version
  end

  #普通方法
  def add(a,b)
    return a+b
  end

  #静态方法
  def self.showversion
    return Version
  end

  #把V方法定义范围静态方法
  module_function :v
end

puts BaseFunc::Version
puts BaseFunc::showversion
puts BaseFunc.showversion
puts BaseFunc.v

#定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用
class BaseClass
  include BaseFunc
end

puts "-----------------------------"
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 < 50
  puts "aaa"
else
  puts "bbb"
end

#3case...when使用
week_day = 0

case week_day

when 0,7
puts "星期一"
when 1
  puts "星期一"
when 2
  puts "星期二"
when 3
  puts "星期三"
when 4
  puts "星期四"
when 5
  puts "星期五"
when 6
  puts "星期六"
when 7
  puts "星期七"
else
  raise Exception.new("没这天")
end

输出:
bbb
星期一

17.普通循环
  • for…in
  • while
  • until
#1.数组循环输出
gamelist=["aaa","bbb","ccc"]
for game in gamelist do
  puts game
end

#2.循环1-4
for num in 1...5 do
  puts num
end

#3.循环1-5
for num in 1..5 do
  puts num
end

#4.while 循环
index=0
while index < 5 do
  puts "while.index=" + index.to_s
  index+=1
end

#5.until
index=0
until index == 5 do
  puts "until.index="+ index.to_s
  index+=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
end

gamelist.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,每次增加3
 1.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
else
  puts "正常处理。。。"
ensure
  #最后处理,无论是否发生处理事件均输出(finally)
  puts "最后的扫尾工作。。。"
end

输出:
处理开始。。。
错误发生!!!
divided by 0
最后的扫尾工作。。。

你可能感兴趣的:(ruby,ruby入门语法)