Rubyだと
基本的には、破壊的な変更を意味する。呼び出したオブジェクト側も変更してしまう。
$ irb > str = 'hoge' => "hoge" #普通にupcaseする > str.upcase => "HOGE" #呼び出したオブジェクトに変更はない > str => "hoge" #破壊的に変更する > str.upcase! => "HOGE" #呼び出したオブジェクトも変更されている > str => "HOGE"
※すべての!メソッドが破壊的と決まっているわけではないので、自信がない場合はRubyリファレンスを読むのが吉。
Railsだと
ActiveRecordでよく見るやつ
- save!
- create!
メソッドを実行した結果、バリデーションに失敗したとき(DBに保存できなかったとき)に例外を発生させる。
By default, save! always runs validations. If any of them fail ActiveRecord::RecordInvalid gets raised, and the record won't be saved.
create!
についても同じことが公式リファレンスに書いている。
Creates an object (or multiple objects) and saves it to the database, if validations pass. Raises a RecordInvalid error if validations fail, unlike Base#create.
ActiveRecord::Persistence::ClassMethods
Railsのメソッドで感嘆符がついているものを見かけたら、「ActiveRecord 系のアレだな〜」「DBに保存できないとき例外出したいんだな〜」と捉えておけばよいかも。