یک «شرط سهگانه» روشی کوتاهتر برای نوشتن دستورهای سادهی 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
در این تمرین، قوانینی برای وبسایت یک سینما میسازید.
این سینما برای «بازنشستگان» تخفیف ارائه میدهد. هر کسی که ۶۰ سال یا بیشتر داشته باشد، برای بلیت ۱۰٫۰۰ میپردازد. هر کسی که جوانتر باشد، کل ۱۵٫۰۰ را میپردازد.
متد Moviegoer#ticket_price را با استفاده از یک عبارت شرطی سهگانه بنویسید.
Moviegoer.new(21).ticket_price
#=> 15
Moviegoer.new(65).ticket_price
#=> 10
این سینما یک سیستم سادهشدهی تأیید سن دارد. اگر ۱۸ سال یا بیشتر داشته باشید، میتوانید فیلمهای ترسناک تماشا کنید. اگر جوانتر باشید، نمیتوانید.
متد 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 را برای یک محدودهی مشخص تعریف کنید.