Ruby 3-2

こんにちは!

小雨の中の散歩も乙なものです。

代入演算子

i +=1 は i = i + 1 などは直感的で理解しやすいです。
少しややこしい参照値の話を確認しておきます。

ref_id.rb
Image from Gyazo

Image from Gyazo

object_id は参照を返すメソッドです。
「変数data2に変数data1を代入する」とは値のコピーでなく参照値のコピーであるとのことです。
今回であれば、参照値が一致しています。

ref_change.rb
Image from Gyazo

Image from Gyazo

中身の要素の変更、これは問題ありません。

ref_change2.rb
Image from Gyazo

Image from Gyazo

配列を変更すると、参照値そのものも変化するため違う結果になっています。

ref_int.rb
Image from Gyazo

Image from Gyazo

Integer型やFloat型の一部などは実際の値が変数に格納されます。
このような実装を即値と呼びます。

ref_int_change.rb
Image from Gyazo

Image from Gyazo

num1 の値が更新されたので、参照値も変更されています。
整数型はイミュータブル型、一度作成したオブジェクトの変更は不可能です。
一方、配列はミュータブル型、オブジェクトの中身の書き換えが可能です。

代入に関しても、何点か整理しておきます。

const_mutable.rb
Image from Gyazo

Image from Gyazo

定数なので、配列そのものの再代入はできません。エラーでした。

const_mutable2.rb
Image from Gyazo

Image from Gyazo

定数を変更していますが、エラーにはなりませんでした。
配列の内容だけの書き換えでは定数違反と見なされないとのことです。

assign_multi.rb
Image from Gyazo

Image from Gyazo

多重代入という機能です。

assign_multi2.rb
Image from Gyazo

Image from Gyazo

配列を指定しての代入も可能です。

assign_multi3.rb
Image from Gyazo

Image from Gyazo

素数が一致していなくても大丈夫です。
余った変数は空になります。

assign_multi_other.rb
Image from Gyazo

Image from Gyazo

変数にアスタリスクを付与することで、分解されなかった残りの要素をまとめて配列として切り出すことが可能です。
ただし、複数の要素にアスタリスクを指定することはできません。

assign_multi_other2.rb
Image from Gyazo

Image from Gyazo

該当する要素がなければ、空の配列が生成されます。

assign_multi_cut.rb
Image from Gyazo

Image from Gyazo

アスタリスクのみを利用することで、いらない要素をカットできます。

assign_multi_nest.rb
Image from Gyazo

Image from Gyazo

入れ子の配列を多重代入することも可能です。
入れ子の配列を展開する場合は丸カッコを使用します。

assign_multi_swap.rb
Image from Gyazo

Image from Gyazo

値を入れ替える、スワッピングも可能です。

色々と書きました。
値の取得などと関わってくる大切な内容でした。

ではでは。