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?

【Ruby】ハッシュを使って条件分岐をスッキリさせよう

Posted at

これは何?

目の前にいる海外からやってきた人にあいさつしたいとき、ありますよね?
どうせあいさつするならその方の国の言語であいさつしたいものです。

相手の国に合わせたあいさつをするときに便利なのが、条件分岐です。
この条件分岐をスッキリ書く方法を学んだので、アウトプットします。

やってみよう

レベル別に段階を踏んでやっていきます。

if文

if country == 'Japan'
  hello = 'こんにちは'
elsif country == 'USA'
  hello = 'Hello'
elsif country == 'France'
  hello = 'Bonjour'
elsif country == 'Spain'
  hello = 'Hola'
elsif country == 'China'
  hello = '你好'
else
  hello = 'Hello'  # デフォルトの挨拶
end

もっとも地道に書く方法として、if文があります。
でも、いちいちelsif country ==hello =と書くのはあまりスマートには見えないですね。

case文

case country
when 'Japan'
  hello = 'こんにちは'
when 'USA'
  hello = 'Hello'
when 'France'
  hello = 'Bonjour'
when 'Spain'
  hello = 'Hola'
when 'China'
  hello = '你好'
else
  hello = 'Hello'  # デフォルトの挨拶
end

if文から卒業し、case文で条件分岐をしています。
ただしこれもいちいちhello =と代入するのはちょっとカッコ悪いですよね。

ハッシュを使用

今回のような、条件と代入する変数のそれぞれが常に同一である場合は、以下のようにハッシュを使用することが可能です。

hello = {
  Japan: 'こんにちは',
  USA: 'Hello',
  France: 'Bonjour',
  Spain: 'Hola',
  China: '你好'
}[country.to_sym]

to_symしない場合は以下のように書きます。

hello = {
  'Japan' => 'こんにちは',
  'USA' => 'Hello',
  'France' => 'Bonjour',
  'Spain' => 'Hola',
  'China' => '你好'
}[country]

countryと一致するキーが見つからない場合のデフォルト値を設定する場合は以下のようにします。

hello = {
  Japan: 'こんにちは',
  USA: 'Hello',
  France: 'Bonjour',
  Spain: 'Hola',
  China: '你好'
}.fetch(country.to_sym, 'Hello')

まとめ: あいさつは手短に

条件分岐のシンプルな書き方を知っておけば役に立つはず。

0
0
1

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?