8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ActiveRecordとrubyの感嘆符!は意味が違う件について

Last updated at Posted at 2020-03-01

はじめに

rubyのメソッドに対して使う!と、Railsのメソッドに対して使う!では、意味が異なるので簡単にまとめてみました。

簡潔に言うと...

rubyの場合
注意喚起。今からオブジェクトに対して何らかの変化を加えますよ〜とういう合図。
例:uniq! reverse!

ActiveRecordの場合
メソッドを実行した結果の返却値がnilの場合に例外を発生させる。
例:save! update!

● rubyの場合

hoge = [1,2,2,3,3]
hoge.uniq! #たまに見かけるこれ!

uniquniq!何が違うの?

uniq 配列から重複した要素を取り除いた新しい配列を返す。
uniq! 削除を破壊的に行い元の配列をの値を操作する。

hoge = [1,2,2,3,3]

hoge.uniq
p hoge #-> [1,2,2,3,3]

hoge.uniq!
p hoge #-> [1,2,3]

●まとめると...

!は配列を破壊的に操作すると言う注意喚起を意味しています。
(慣習的に!は注意喚起に使われることが多い様です。)
uniqの場合は、をつけることで、配列そのものに変更を加えています。

● ActiveRecordの場合

def update
 @hoge = Hoge.find(params[:id])
 @hoge.save! #よく見かけるこれ!
end 

savesave!何が違うの?

save レコードの保存に失敗 → nilを返す
save! レコードの保存に失敗 → 例外を発生させる

●まとめると...

!はメソッドの処理が失敗した場合に、例外処理を行うと言う意味を持たせています。

番外編

● 例外処理とは

例えば、「入力された2つの数を足し合わせて結果を返す」コードがあるとき、利用者が入力欄に「あ」と書き入れると数値の足し算の処理は実行不可能となる。
このようなプログラムが通常の処理では想定していない事態や事象を「例外」(exception)と呼び、例外が生じた時の対応を記述したコードを例外処理という。

つまり、何らかの予期せぬエラーが発生した際に、別の処理を行うこと。

8
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?