絶賛Rails勉強中なので適当に使っていた!や?をまとめます
ActiveRecordの!
create,save,update,destroy等のメソッドの後ろに!をつけた場合、それぞれのCRUD処理が失敗した場合に例外(ActiveRecord::RecordNotFound)を返すようになります。
!を付けない場合は成功した場合true、失敗した場合falseが返却されます。
Rubyの!
rubyのメソッドに!をつけた場合は「破壊的メソッド」になるそうです。なに言ってんのかわかんないですね。
破壊的メソッドとは?
この方の記事がわかりやすかったです。
https://qiita.com/tentom/items/0164b68dff94702e3880
破壊的メソッドにした場合はオブジェクトが再生成されます。
非破壊的メソッどはオブジェクトは変わらないまま値だけが変わります。
?
メソッドに?を付けることで真偽値を返すメソッドだということを直感的に表すことができます。
つけなくても真偽値が返ってくることには変わりありませんが、付けた方がわかりやすくなっていいと思います。
メソッドに?を付けた場合、メソッドを呼び出すときにも?を付ける必要があります。