184
133

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 5 years have passed since last update.

KIT DeveloperAdvent Calendar 2016

Day 3

Railsで感嘆符!を理解しよう(save, save!)

Last updated at Posted at 2016-12-02

はじめに

Railsの勉強をしている際、「メソッドの最後に!がついているけど何だこれは???」と思ったことがありました。Rubyの場合は!で否定演算子や!!でメソッドの返り値をtrue/falseにするなどがありますが、今回はRailsメソッドの感嘆符!について説明していこうと思います。

#感嘆符!とは
感嘆符とはエクスクラメーションマークのことです。以下Wikipediaより

(かんたんふ)とは、約物のひとつで、「!」 と書き表される。 雨垂れ、または俗にビックリマークとも呼ばれる。 また英語表記に由来した呼称「エクスクラメーション・マーク (exclamation mark)」と呼ばれることもある。

!をつけるとつけないとでは何が違うのか?

よく使われるメソッドでcreatesaveなどがあります。これらの処理を実行しレコードの作成、保存に失敗した際、通常の場合はnilを返します。しかし、create!save!のようにをつけることによりActiveRecord::RecordNotFoundエラーを発生させることができます。
つまりをつけることにより、例外を発生させるか発生させないかの違いです。


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


saveメソッドの場合は保存の成功と失敗を true/false で返すのに対して、save!メソッドは保存を失敗した場合に例外を返します。つまり、save!を使えば例外をトリガーにしてロールバックなどの処理を行うことができるため、比較的使用頻度が高いかと思います。

補足:そもそも例外処理とは?

プログラムがある処理を実行している途中で、なんらかの異常が発生した場合に、現在の処理を中断(中止)して、別の処理を行うこと。その際に発生した異常のことを例外と呼ぶ

つまり、プログラムがすんなり通らなかったときに行う処理のことを指します。理想とは違う処理が例外という解釈でもいいと思います。

#まとめ

  • メソッドの最後にをつけることにより、レコードの作成などに失敗した際の挙動をかえることができる。
    → 例外処理を書く際に利用できる。
184
133
0

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
184
133

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?