或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

sortとsort!の違い

どうも、パイソンです。

今日は、Rubyでsortのやり方を調査した時の内容をメモしておきます。

sortとsort!

ref.xaio.jp


ruby sort」とググッたら出てきたリファレンスを眺めてると、並び替えをするメソッドにもsortと、sort!という2通りがある模様。

はぁ、、?「!」に何の意味があるんじゃ?ということで確認してみると、、

「!」はメソッド名の一部です。慣用的に、 同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッド(例: tr と tr!)で使われます。

https://docs.ruby-lang.org/ja/2.1.0/doc/symref.html

ということらしい。

要は「!」付きのメソッドはオブジェクトに作用するから気を付けましょうねー。的なノリなんだろうか。。

そこで、試しに書いて見たのがこんなプログラム。

numbers1 = [2, 6, 5, 4, 9, 8, 10, 3, 7, 1]

p numbers1.sort  #=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p numbers1       #=>[2, 6, 5, 4, 9, 8, 10, 3, 7, 1]

numbers2 = [2, 6, 5, 4, 9, 8, 10, 3, 7, 1]

p numbers2.sort! #=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
p numbers2       #=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ま、確かにsort!のほうはオブジェクトそのものを書き換えてるんだなーというのが分かりました。

「!」無しのメソッドは安全?

そんなことなら、「!」無しのメソッドは元のオブジェクトを編集したらあかんのかい!という疑問も浮かんでくるもの。

が、そんな事は無かった。どうも「!」の有無はあくまで目安的な物に過ぎないというのが現状である模様。

参考URL

qiita.com

あくまで、こんな慣習があるんですよー、という程度に覚えておこう。