Just do IT

思うは招く

Ruby や Rails でよく見る、メソッド名の後ろのびっくりマーク(感嘆符)の意味

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.

ActiveRecord::Persistence

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に保存できないとき例外出したいんだな〜」と捉えておけばよいかも。

参考記事