2.9 ruby的控制结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shine_a/article/details/85327978

1、条件判断语句

(1)if 如果case1条件为true,则执行code1(执行完case1,条件判断语句结束,不会再去判断case2条件是否为true)。如果case1条件为false,接着判断case2条件,若为true,执行code2,若为false,则执行else子句中的code3。
#需要注意的是elsif,不是elseif
if case1
  code1...
elsif case2
  code2...
else
  code3...
end*

举例:

#定义一个变量,赋值为6
irb(main):034:0> i = 6
=> 6
#i的值为6,满足第一个条件,则执行puts "我是#{i},我大于1",之后的条件即使符合也不会再判断
irb(main):035:0> if i > 1
irb(main):036:1>   puts "我是#{i},我大于1"
irb(main):037:1> elsif i > 3
irb(main):038:1>   puts "我是#{i},我大于3"
irb(main):039:1> elsif i > 5
irb(main):040:1>   puts "我是#{i},我大于5"
irb(main):041:1> else
irb(main):042:1*   puts "我是#{i},我以上条件都不符合"
irb(main):043:1> end
我是6,我大于1

只有一条语句判断时,也可以将if语句写成一行

irb(main):046:0> puts "hello,我在输出" if 2>1
#当if后面的条件语句为true时,执行if前面的语句
hello,我在输出
=> nil
#当if后面的条件语句为false时,不执行前面的语句
irb(main):047:0> puts "条件为false" if 2<1
=> nil
(2)unless 如果case1条件为false,则执行code1,如果为true,不执行,刚好与if语句相反。
unless case1
  code1...
end

举例:

irb(main):048:0> unless 1 > 2
irb(main):049:1>   puts "hello,当条件语句为fasle时,我应该输出"
irb(main):050:1> end
hello,当条件语句为fasle时,我应该输出
#也可以写成一行语句
irb(main):051:0> puts "hello,当条件语句为fasle时,我应该输出"  unless 1 > 2
hello,当条件语句为fasle时,我应该输出

2、循环语句

(1)while 如果case1为true,code1会循环执行若干次,直到case1为false时停止循环。case1不能一直为true,不然会形成死循环。
while case1
  code1...
end

举例:

irb(main):056:0> i = 0
=> 0
irb(main):057:0> while i < 5
irb(main):058:1>   puts "输出数字:#{i}"
irb(main):059:1>   i += 1
irb(main):060:1> end
输出数字:0
输出数字:1
输出数字:2
输出数字:3
输出数字:4
=> nil
(2)for…in 后面跟一个区间(Range)或者数组(Array),相当于遍历数组,
#for...in遍历区间
irb(main):064:0> for i in 0..4
irb(main):065:1>   puts "i的值为#{i}"
irb(main):066:1> end
i的值为0
i的值为1
i的值为2
i的值为3
i的值为4
=> 0..4

相当于下面的each方法,在ruby中一般用each。

irb(main):073:0> (0..4).each do |i|
irb(main):074:1*   puts "i的值为#{i}"
irb(main):075:1> end
i的值为0
i的值为1
i的值为2
i的值为3
i的值为4
=> 0..4

(3)break、next

  • break跳出循环
  • next跳过本次循环,进入下一次循环
#当i = 3时,会进入if,执行break语句跳出循环,下面的语句不会执行
irb(main):076:0> for i in 0..4
irb(main):077:1>   if i == 3
irb(main):078:2>     break
irb(main):079:2>   end
irb(main):080:1>   puts "i的值为#{i}"
irb(main):081:1> end
i的值为0
i的值为1
i的值为2
#当i = 3时,会进入if,执行next语句跳过本次循环,进入下一次循环,所以不会输出“i的值为3
irb(main):088:0> for i in 0..4
irb(main):089:1> if i == 3
irb(main):090:2>     next
irb(main):091:2>   end
irb(main):092:1>   puts "i的值为#{i}"
irb(main):093:1> end
i的值为0
i的值为1
i的值为2
i的值为4
=> 0..4
#每次循环数字会加1,当i = 3时,先执行完puts语句,再进行if语句的判断。符合大于2的条件,执行break跳出循环。
irb(main):002:0> while i < 5
irb(main):003:1> puts "输出数字:#{i}"
irb(main):004:1> if i > 2
irb(main):005:2> break
irb(main):006:2> end
irb(main):007:1> i += 1
irb(main):008:1> end
输出数字:0
输出数字:1
输出数字:2
输出数字:3

猜你喜欢

转载自blog.csdn.net/shine_a/article/details/85327978
2.9
今日推荐