0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Ruby on rails] case式を使わない方法を模索する

Posted at

はじめに

未経験からエンジニアに転職しまして
業務で学んだ事をアウトプットしていきます!

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 => 料金を出力するだけ

定数にして別ファイルに記載することで責務を切り分けてるのが気持ち良く感じます。

勉強時代は定数ってものにあまり馴染みがありませんでしたが、こんな使い方もあると勉強になりました。

読んで頂きありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?