はじめに
未経験からエンジニアに転職しまして
業務で学んだ事をアウトプットしていきます!
case文を使わなくても良いかも知れない
例えば遊園地の入園料で年齢によって処理を切り分けたいとします。
切り分けすぎですが
0歳から5歳なら180(円)を出力
6歳から10歳なら300(円)を出力
11歳から15歳なら500(円)を出力
16歳から20歳なら1,000(円)を出力
21歳以上なら3,000(円)を出力
したいとします。
case式で書く
今までの自分であればcase式を書いていました。
例えばこんな感じです。
text.rb
age = 20
case age
when 0..5
puts 180
when 6..10
puts 300
when 11..15
puts 500
when 16..20
puts 1_000
when 21..nil
puts 3_000
end
=>1000
よくある書き方だと思います。
ですが、別のファイルに切り出して定数で管理しても良いかもしれません。
定数で管理してみる
例えば別ファイルでこの様に定義してみます。
constants.rb
class Constants
Amusement_Park = [
{ age_range: 0..5, fee: 180},
{ age_range: 6..10, fee: 300},
{ age_range: 11..15, fee: 500},
{ age_range: 16..20, fee: 1_000},
{ age_range: 21..nil, fee: 3_000}
].freeze
end
この様に定義した定数を下記の様に使います。
text.rb
puts Constants::Amusement_Park.find {| amusement | amusement[:age_range].include?(age)}.fetch(:fee)
=>1000
とこれでも同じ出力結果を得る事が出来ます。
どちらが良いかは状況によるかと思いますが個人的には
constants.rb => 定数を管理するだけ
text.rb => 料金を出力するだけ
定数にして別ファイルに記載することで責務を切り分けてるのが気持ち良く感じます。
勉強時代は定数ってものにあまり馴染みがありませんでしたが、こんな使い方もあると勉強になりました。
読んで頂きありがとうございました!