三元条件是一种编写简单 if/else 语句的简写方式。如果一条 if/else 语句只包含两个分支,一个对应条件为真的情况,一个对应条件为假的情况,就可以把它改写成三元条件。
三元条件用?和:两个符号组合来拆分一个条件:
condition ? true_branch : false_branch
?左边的代码是条件,右边的代码包含两个可能的分支,用:分隔。如果条件为_真_,就执行:左_边的代码。如果条件为_假,就执行:_右_边的代码。
例如:
if traffic_light == 'green'
cross_the_road
else
wait
end
可以改写成:
traffic_light == 'green' ? cross_the_road : wait
在本练习中,你将为一个电影院的网站制定规则。
电影院为“养老金”提供折扣。 60 岁及以上的人购票支付 10.00。 较年轻的人则支付全价 15.00。
使用三元运算符编写Moviegoer#ticket_price方法。
Moviegoer.new(21).ticket_price
#=> 15
Moviegoer.new(65).ticket_price
#=> 10
电影院采用简化的年龄验证系统。 如果你年满 18 岁,就可以观看恐怖片。 如果未满 18 岁,则不能观看。
实现Moviegoer#watch_scary_movie?方法。
它应返回某人是否被允许观看该电影。
Moviegoer.new(21).watch_scary_movie?
#=> true
Moviegoer.new(17).watch_scary_movie?
#=> false
电影院有一个电影俱乐部项目。 会员观看任何电影都能获得免费爆米花。
实现Moviegoer.claim_free_popcorn!方法。
如果观影者是电影俱乐部会员,就应获得免费爆米花。
如果不是,该方法应抛出代码顶部定义的UnsupportedOperation异常。
Moviegoer.new(21, member: true).claim_free_popcorn!
#=> 🍿
Moviegoer.new(17, member: false).claim_free_popcorn!
#=> Exception was raised! (NotMovieClubMemberError)
在本练习中,你需要为特定作用域定义UnsupportedOperation异常。