三項演算子を使うと、単純なif/else文をより短く書けます。
if/else文が、条件が真のときと偽のときの2つだけの分岐を持つなら、三項演算子で書き直すことができます。
三項演算子では、?と:を組み合わせて条件を分割します。
condition ? true_branch : false_branch
?の左側のコードが条件で、右側には:で区切られた2つの分岐が書かれます。
条件が_真_なら、:の_左_側のコードが実行されます。
条件が_偽_なら、:の_右_側のコードが実行されます。
たとえば、次のコードは、
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例外を定義することが求められます。