Ruby 条件语句
程序代码默认是一条接着一条顺序执行下去,但有时候我们需要根据一些判断条件执行一些另一些语句或者根据判断条件忽略执行一些语句。 我们把程序的这种行为称之为流程控制
Ruby 编程语言流程控制语句通过程序设定一个或多个条件语句来设定:
- 在条件为 true 时执行指定程序代码
- 在条件为 false 时执行气他指定代码
本章我们会学习所有的条件语句和 Ruby 中可用的修饰符
Ruby 语言 if...else 语句
if...else 语句语法格式如下
if conditional [then] statement1 [elsif conditional [then] statement2...]... [else statement3...] end
if 表达式用于条件执行。
Ruby 语言中,除了 false 和 nil 为假,其他值都为真,包括 0 也为真
如果 conditional 为真,则执行 statement1 如果 conditional 为假,则执行 else 子句中指定的 statement3
then 保留字通常可以省略 但若想在一行内写出完整的 if 式,则必须以 then 隔开条件式和程式区块
if a == 4 then a = 7 end
范例
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. age = 16 puts("age = #{age}") if age > 18 puts "青春年少奋斗期" elsif age <= 18 and age > 0 puts "花样年华一样的年纪" else puts "age 的值有错误" end
运行以上范例,输出结果如下
$ ruby main.rb age = 16 花样年华一样的年纪
Ruby 语言中的 if 修饰符
if 修饰符语法格式如下
code if condition
if 修饰符表示如果 conditiona 为真,则执行 code
范例
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. age = 16 print "age = #{age}\n" if age > 14
运行以上范例,输出结果如下
$ ruby main.rb age = 16
Ruby unless 语句
unless 语句语法格式如下
unless conditional [then] statement1 [else statement2 ] end
unless 语句和 if 语句作用相反:
- 如果 conditional 为假,则执行 statement1
- 如果 conditional 为真,则执行 else 子句中指定的 statement2
else 语句是可选的。
范例
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. age = 16 puts("age = #{age} ") unless age > 18 puts "花样年华一样的年纪" else puts "青春奋斗期" end
运行以上范例,输出结果如下
$ ruby main.rb age = 16 花样年华一样的年纪
Ruby unless 修饰符
unless 语句语法格式如下
code unless conditional
如果 conditional 为假,则执行 code
范例
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. age = 16 puts("age = #{age} ") puts("#{age} 岁是花样年华一样的年纪") unless age > 18 puts("\n==================\n") age = 24 puts("age = #{age} ") puts("#{age} 岁是正直青春奋斗期") unless age <= 18
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb age = 16 16 岁是花样年华一样的年纪 ================== age = 24 24 岁是正直青春奋斗期
Ruby case 语句
case 语句语法格式如下
case expression1 [when expression2 [, expression3 ...] [then] statmente1 ]... [else statement2 ] end
case 语句先对 expression1 进行匹配判断,然后根据匹配结果进行分支选择。
case 语句使用 === 运算符比较 when 指定的 expression ,若一致的话就执行 statement1
then 关键字
then 关键字通常可以省略
但若想在一行内写出完整的 when 式,则必须以 then 隔开条件式和程式区块
when a == 4 then a = 7 end
范例
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. $age = 5 puts "age = #$age" case $age when 0 .. 2 puts "婴儿" when 3 .. 6 puts "小孩" when 7 .. 12 puts "child" when 13 .. 18 puts "少年" else puts "其他年龄段的" end
运行以上范例,输出结果为
$ ruby main.rb age = 5 小孩
当 case 的 "表达式" 部分被省略时,将计算第一个when条件部分为真的表达式
# !/usr/bin/ruby -w # -*- encoding:utf-8 -*- # filename: main.rb # author: 简单教程(www.twle.cn) # Copyright © 2015-2065 www.twle.cn. All rights reserved. a = false b = true c = false case when a then puts 'a is true' when b then puts 'b is true' when c then puts 'c is true' end
运行以上 Ruby 范例,输出结果如下
$ ruby main.rb
b is true
case 语句可以用 if 语句来重写
case expr0 when expr1, expr2 stmt1 when expr3, expr4 stmt2 else stmt3 end
可以用 if 语句重写为
_tmp = expr0 if expr1 === _tmp || expr2 === _tmp stmt1 elsif expr3 === _tmp || expr4 === _tmp stmt2 else stmt3 end