0
0

More than 1 year has passed since last update.

[Ruby]破壊的メソッドと値渡しについて

Last updated at Posted at 2021-09-22

はじめに

本記事では、新しく知った破壊的メソッド値渡しについてを記述します。
新しく知ったのでアウトプットしますが、
間違えている点があればご指摘いただけますと幸いです。

破壊的メソッド

レシーバになるオブジェクトの値そのものを変更するメソッド。
それ以降については、
オブジェクトの値が変更され、設定していたオブジェクトの値は破壊されてます。

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の破壊的メソッドについて現役エンジニアが解説【初心者向け】

明日も頑張ります!

0
0
4

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
0
0