はじめに
本記事では、新しく知った破壊的メソッド
と値渡し
についてを記述します。
新しく知ったのでアウトプットしますが、
間違えている点があればご指摘いただけますと幸いです。
破壊的メソッド
レシーバになるオブジェクトの値そのものを変更する
メソッド。
それ以降については、
オブジェクトの値が変更され、設定していたオブジェクトの値は破壊されてます。
例
food = "apple"
p food.upcase!
p food
# 結果は「APPLE」
値渡し
私が学習しているRuby
は値渡し
になります。
(追記)
コメントにてご指摘いただきましたので、変更します。
正しくは、参照の値渡し
です。
値渡し
とは、変数の値をコピーする渡し方になります。
メソッド内で値を変更しようが、結果は変わらないです。
def food(name)
name = orange
puts name # 結果「orange」
end
name = apple
food(name)
puts name # 結果変わらず「apple」
破壊的メソッド実行
その場合は、結果は変わります
。
Ruby自体、一連の流れ全てがオブジェクトであり、
オブジェクトとしてメソッドに引数を渡すためです。
def food(name)
name.upcase!
puts name # 結果「ORANGE」
end
name = apple
food(name)
puts name # 結果「ORANGE」
以上です。
終わりに
私的に、かなり難しいところで、
記事にするための理解で、何時間もかけてしまいました。
また、.object_idメソッド
を使用することで、
オブジェクトが変更されているかどうかを確認することができました。
破壊的メソッドでは、値は変更されているものの、オブジェクトは変更されておらず、
非破壊的メソッドでは、値は変更されていないが、オブジェクトは変更されているという結果でした。
ここについては、もう少し深堀したいと考えています。(沼にハマらない程度に)
以下参考サイトです。
値渡しと参照渡しの違いを理解する
【Ruby】メソッドの引数は参照の値渡し?
Rubyの破壊的メソッドについて
Rubyの破壊的メソッドについて現役エンジニアが解説【初心者向け】
明日も頑張ります!