1
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 3 years have passed since last update.

ハッシュについて

Last updated at Posted at 2020-06-07

前回のシンボルに関する記事

ハッシュのキーにシンボルを使う

前回の、シンボルに関する記事で紹介したように、ハッシュのキーには文字列よりもシンボルの方が適しています。
ハッシュのキーにシンボルを使うと次のようなコードになります。

menu = { :food => 'rice', :dessert => 'cake'}
# 値を取り出す場合
menu[:dessert] # => "cake"
# 新しいキーと値の組み合わせを追加する場合
menu[:drink] = 'water'
p menu # => {:food=>"rice", :dessert=>"cake", :drink=>"water"}

シンボルがキーになる場合、=> を使わずにシンボル:値という記法でハッシュを作成できます。
(※コロンの位置が左から右に変わります)

(例)

menu = {food: 'rice', dessert: 'cake'}
# 値を取り出す時は同じ
menu[:dessert] # => "cake"

(例)キーも値もシンボルの場合のコード

{food: :rice, dessert: :cake, drink: :water}

メソッドのキーワード引数とハッシュ

メソッドに引数を渡す場合、メソッドのキーワード引数を使うと可読性が上がります。
メソッドのキーワード引数は次のように定義します。

def  メソッド名(キーワード引数1: デフォルト値1, キーワード引数2: デフォルト値2)
# メソッドの実装
end

(キーワード引数を使用した例)

def buy_food(menu, drink: true, dessert: true)
  # foodを購入
  if drink
    # ドリンクを購入
  end
  if dessert
    # デザートを購入
  end
end
# ライスとドリンクとデザートを購入
buy_food('rice', drink: true, dessert: true)
# ピザとドリンクを購入
buy_food('pizza', drink: true, dessert: false)

キーワード引数を持つメソッドを呼び出す場合は、ハッシュを作成した時と同じように
シンボル:値の形式で引数を指定します。

また、キーワード引数はデフォルト値が設定されているので、引数を省略することができます。

buy_food('rice', drink: true, dessert: true)

⬇︎ drink,dessertもデフォルト値のtrueを使用するので、指定しない。

buy_food('rice')

キーワード引数のデフォルト値は省略することもできます。

def buy_food(menu, drink:, dessert:)
# 省略
end

デフォルト値を持たないキーワード引数は、呼び出し時に省略できません。
(省略すると、エラーになります。)

buy_food('rice', drink: true, dessert: true)

キーワード引数を使うメソッドを呼び出す場合、
キーワード引数に一致するハッシュ(キーはシンボル)を引数として渡すことも可能です。

Params = { drink: true, dessert: false }
buy_food('rice', params)

参考にした文献

プロを目指す人のためのRuby入門

1
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
1
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?