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