TL;DR
Ruby では、レシーバを書き換えるメソッドに「!」を付ける慣習があるが、「!」が付かない破壊的メソッドもある。
仕組み
Ruby の公式ドキュメントによると、名前が「!」で終わるメソッド(bang メソッド)は、慣習として「危険な」メソッドとみなされる。コアライブラリでは、「!」の付かない同名のメソッドと違い、レシーバを恒久的に書き換えることを示す。ただし、これは「!」が付くメソッドについての慣習である。レシーバを書き換えるメソッドに必ず「!」が付くわけではない。
注意点
「!」が付いていないからといって、非破壊的なメソッドだと決めつけない。また、コアライブラリ以外では、この慣習が守られているとは限らない。