はじめてのRuby!fetchメソッドの使いかたをマスターしよう!

こんにちは!エンジニア兼ライターのヤマシタです。

RubyにはHash(ハッシュ)のキーに対応した値を取り出すために便利なfetchメソッドがあります。

ハッシュのキーを指定して値を取り出すだけなら要素にキーを指定するだけでOKですが、fetchメソッドを使うことによる便利な使い方があることをご存知でしたか?

ここでは、そんなfetchメソッドについて

【基礎】fetchメソッドとは
【基礎】fetchメソッドの基本的な使い方
【発展】fetchメソッドの例外処理
【発展】fetchメソッドでデフォルト値を指定する

などについて解説いたします。

fetchメソッドはハッシュの値を取り出すときに便利なメソッドですので、使い方をしっかりと理解しておきましょう。

目次

fetchとは

fetchメソッドは引数にハッシュのキーを指定することにより、そのキーとセットになっているバリューを取り出します。

fetchメソッドの書き方

hash.fetch(key)

基本的には「hash:[キー]」でバリューを取り出す動作と代わりありませんが、fetchでは指定したキーが存在しない場合は例外を返します。

次よりfetchの使い方を詳しく見ていきましょう。

fetchの使い方

ここではパターン別にfetchの使い方を解説していきます。

以下の例ではfetchでハッシュのキーを指定して紐づくバリューを取得しています。

サンプルプログラム:

fruits = { "apple" => 100, "orange" => 80, "melon" => 450 }

puts fruits.fetch("apple")
puts fruits.fetch("orange")
puts fruits.fetch("melon")

実行結果:

100
80
450

このように指定したキーのバリューが簡単に取得できることがわかりますね!

fetchの例外処理

fetchメソッドは前述したように引数に指定したキーが存在しないと例外が発生します。

サンプルプログラム:

fruits = { "apple" => 100, "orange" => 80, "melon" => 450 }

puts fruits.fetch("banana")

実行結果:

Main.rb:5:in `fetch’: key not found: “banana” (KeyError)
    from Main.rb:5:in `<main>’

ここではハッシュに存在しないキー「banana」を指定したため例外KeyErrorが発生しました。

このようにfetchではキーが存在しない場合は例外が発生します。

そのため、以下のように例外処理を発生させたい場合はfetchメソッドを使用することをおすすめします。

サンプルプログラム:

begin
  fruits = { "apple" => 100, "orange" => 80, "melon" => 450 }
  puts fruits.fetch("banana")
rescue => e
  puts e
end

実行結果:

key not found: “banana”

Rubyの例外処理については、以下の記事で詳しく解説していますのでぜひ参考にしてください。

defaultを指定する

fetchメソッドでは第二引数にデフォルトのバリューを設定することができます。

第二引数にデフォルトのバリューを設定しておくことで、キーが存在しなかった場合は例外ではなく、指定したデフォルトの値を返します。

サンプルプログラム:

fruits = { "apple" => 100, "orange" => 80, "melon" => 450 }

puts fruits.fetch("banana", :"このキーは存在しません")

実行結果:

このキーは存在しません

このように存在しないキーを指定したため、第二引数に設定した値が出力されました!

まとめ

ここではfetchメソッドについて、

  • fetchメソッドとは
  • fetchメソッドの基本的な使い方
  • fetchメソッドの例外処理
  • fetchメソッドでデフォルト値を指定する

などについて解説しました。

fetchメソッドを使用すれば、もしハッシュのキーが存在しなかった場合は例外処理やデフォルト値の設定など、柔軟な対処が可能になりますので、使い方についてはよく理解しておきましょう。

もしfetchメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

システムエンジニアとして10年勤務→フリーランスへ。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

目次