12
6

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.

RubyAdvent Calendar 2023

Day 11

【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話

Posted at

はじめに

どうもこんにちはもきお(@mokio_50)です。今回は実務で「おっ、これいいじゃん」と思ったちょっとしたリファクタリングになります。

例として今回は東海オンエアのメンバーからメンバーカラーを返すと言うのを例にしました。

if文をcase文に

一番条件分岐でオーソドックスなif文で書くと

member = "ゆめまる"

if member == "てつや"
  "オレンジ"
elsif member == "りょう"
  "ブルー"
elsif member == "しばゆー"
  "イエロー"
elsif member == "ゆめまる"
  "ピンク"
elsif member == "虫眼鏡"
  "ブラウン"
elsif member == "としみつ"
  "グリーン"
end

今回はゆめまるなのでピンクが表示されるでしょう。

続いてcase文を用いて書くと

member = "ゆめまる"

case member
when "てつや"
  "オレンジ"
when "りょう"
  "ブルー"
when "しばゆー"
  "イエロー"
when "ゆめまる"
  "ピンク"
when "虫眼鏡"
  "ブラウン"
when "としみつ"
  "グリーン"
end

少しスッキリしましたね!これでも結果は同じピンクが返ってきます。

ここまでは良くあるリファクタですが最後にハッシュを使ったリファクタリングを行って終わりたいと思います。

members_color = { 
  "てつや" => "オレンジ",
  "りょう" => "ブルー",
  "しばゆー" => "イエロー",
  "ゆめまる" => "ピンク",
  "虫眼鏡" => "ブラウン",
  "としみつ" => "グリーン"
}

member = "ゆめまる"
puts members_color[member]
=> "ピンク"

ハッシュを使うとかなり簡潔に取り出したい値を取得することができます。
そして更なるメリットはcase文は上から条件比較しなくてはいけないのに対し、ハッシュを使うことによって一致するものを即座に返してくれるので、少し処理速度も早くなります。

おわりに

ちょっとしたリファクタの積み重ねで読みやすい、理解しやすいコードになります。今後他の人が該当コードを改修する時、自分自身が改修することも意外と多いので自分自身のためにもちょっとしたリファクタリングを心がけていきたいですね。

最後までご覧いただきありがとうございました!
少しでも良かったと思っていただけたら左上のいいねボタンポチッといただけますと幸いです。

12
6
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
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?