概要
- ハッシュ、シンボルについて復習をしたので、自分の中で整理しておくことにした
- 学習したことの備忘録
主な内容
- ハッシュ
- シンボル
- keysメソッド、valuesメソッド
- ハッシュのキーワード引数
ハッシュ
{}は、Hashクラスのオブジェクト
a = {}
puts a.class => Hash
まずは基礎の基礎
ハッシュの要素を追加する場合
要素の追加
# ハッシュ[キー] = バリュー
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }
colors["remon"] = "yellow"
puts colors => {"apple"=>"red", "orange"=>"orange", "melon"=>"green", "remon"=>"yellow"}
バリューを取り出したい場合
バリューの取り出し
# ハッシュ[キー]
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }
puts colors["apple"] => red
ハッシュをeach文で繰り返す場合
ハッシュの繰り返し
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }
colors.each do |key, value|
puts "#{key}の色は#{value}です。"
end
=> appleの色はredです。
=> orangeの色はorangeです。
=> melonの色はgreenです。
# ブロックパラメータが1つならバリューが配列になる
colors.each do |color|
key = color[0]
value = color[1]
puts "#{key}の色は#{value}です。"
end
=> appleの色はredです。
=> orangeの色はorangeです。
=> melonの色はgreenです。
シンボル
シンボルは整数として管理されるため、文字列よりも高速に処理できる。
a = :apple
b = "apple"
puts a.class => Symbol
puts b.class => String
ポイント
シンボルは破壊的変更不可。
例
a = :apple
b = "apple"
puts a.upcase! #=> undefined method `upcase!' for :apple:Symbol (NoMethodError)
puts b.upcase! => APPLE
# upcaseなら
puts a.upcase => APPLE
以下、ハッシュをシンボルで書き換える
シンボルによる書き換え
colors = { "apple" => "red", "orange" => "orange", "melon" => "green" }
# キーをシンボルにする
colors = { :apple => "red", :orange => "orange", :melon => "green" }
# => を書き換える
colors = { apple: "red", orange: "orange", melon: "green" }
# バリューもシンボルにする
colors = { apple: :red, orange: :orange, melon: :green }
keysメソッド、valuesメソッド
colors = { apple: :red, orange: :orange, melon: :green }
# キーを取り出す
puts colors.keys
=> apple orange melon
# バリューを取り出す
puts colors.values
=> red orange green
# キーがあるかどうか確認する
puts colors.has_key?(:apple)
=> true
キーワード引数
キーワード引数とはRuby2.0で導入された機能で、引数の意味を分かりやすく記述することができる機能。引数の可読性を高める。
デフォルト値を設定しない場合
キーワード引数
def person(last_name:, first_name:, favorite_food:)
puts "私の名前は#{last_name} #{first_name}で、好きな食べ物は#{favorite_food}です。"
end
puts person(last_name: "山田", first_name: "花子", favorite_food: "寿司") => 私の名前は山田 花子で、好きな食べ物は寿司です。
# 順序を変えても正常に動作する
puts person(favorite_food: "寿司", first_name: "花子", last_name: "山田") => 私の名前は山田 花子で、好きな食べ物は寿司です。
デフォルト値の設定をする場合
キーワード引数(デフォルト値設定)
def person(last_name: "山田", first_name: '太郎', favorite_food: "ラーメン")
puts "私の名前は#{last_name} #{first_name}で、好きな食べ物は#{favorite_food}です。"
end
puts person() => 私の名前は山田 太郎で、好きな食べ物はラーメンです。
最後に
- 何となくの理解は脱却できた
- 言語化してアウトプットを続けることで、理解を定着させたい
⚠️学習4ヶ月目の初学者による投稿です。
⚠️間違いがあるかもしれません。ご容赦ください。
⚠️ご指導、ご教授いただけると幸いです。