破壊的メソッドについて

f:id:ryoutaku_jo:20190715004206p:plain

【結論】

・破壊的メソッドとは、レシーバにあたるオブジェクトの値を変更してしまうメソッド

・破壊的メソッドは、メソッド名にを付ける慣習がある

・しかしRubyでは、他に同名のメソッドが存在しない破壊的メソッドにはが付いていない為、注意が必要

【目次】

【本題】

破壊的メソッドについて

破壊的メソッドとは、レシーバにあたるオブジェクトの値を変更してしまうメソッドの事です。

具体例は以下の通りです。

text = '12345'
=> "12345"

#非破壊的メソッドを実行
text.chop
=> "1234"

#オブジェクトの値は変わらない
text
=> "12345"

#破壊的メソッドを実行
text.chop!
=> "1234"

#オブジェクトの値も変わる
text
=> "1234"

を付ける慣習

なお、破壊的メソッドのメソッド名にはを付ける慣習が存在します。

しかしこの慣習は、同じメソッド名の破壊的メソッドと非破壊的メソッドの両方が存在する場合に、それぞれを見分ける為に用いられます。

その為、同じメソッド名の非破壊的メソッドが存在しない場合は、破壊的メソッドであったとしてもは付いていません。

そういったメソッドを不用意に使用してしまうとオブジェクトの値が書き換わり、予期せぬバグを生み出す恐れがある為、が付かない破壊的メソッドは一通り把握しておく必要があります。

が付いていない破壊的メソッドの例

concat (Array):配列arrayの末尾に引数の配列other_arrayを結合します。
insert(Array):第一引数で指定した位置に第二引数を要素として挿入します。
push(Array):配列の末尾に引数を要素として追加します
unshift(Array):第一引数を配列の先頭に要素として追加します。
delete(Array):配列から引数と同じ要素を探して、すべて削除します。
delete_at(Array):配列から引数の位置の要素を削除します。
delete_if(Array):ブロックの戻り値が真になった要素を削除します。
clear(Array):要素をすべて削除し、配列を空にします。
shift(Array):配列の最初の要素を削除し、その要素を返します
pop(Array):配列の末尾の要素を削除し、その要素を返します。

参考情報

【Ruby】「!」が付かない破壊的メソッドまとめ - Qiita

Rubyの破壊的メソッドについて - Qiita

《今日の学習進捗(3年以内に10000時間に向けて)》

実家帰省中だが、隙間の時間でRubysilverの勉強中。

学習開始からの期間 :219日
今日までの合計時間:2108h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:2000h
目標との解離:108h
「10,000時間」まで、

残り・・・「7892時間!」