三元運算子是用來撰寫簡單 if/else 敘述的更簡短方式。
如果一個 if/else 敘述只包含兩個分支,一個對應條件為 true 的情況,另一個對應條件為 false 的情況,就可以改寫成三元運算子。
三元運算子使用?和:這兩個符號的組合來拆分條件:
condition ? true_branch : false_branch
?左邊的程式碼是條件,右邊的程式碼則包含兩個可能的分支,並以:分隔。
如果條件為 true,就會執行:_左_邊的程式碼。
如果條件為 false,則會執行:_右_邊的程式碼。
例如:
if traffic_light == 'green'
cross_the_road
else
wait
end
可以改寫成:
traffic_light == 'green' ? cross_the_road : wait
在這個練習中,你將為一家電影院的網站建立各種規則。
電影院提供「老人年金」優惠。 年滿 60 歲的觀眾票價是 10.00。 未滿 60 歲的人則須付全額 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例外。