Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

感嘆符!とは

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

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

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

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


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


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

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

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

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

まとめ

  • メソッドの最後にをつけることにより、レコードの作成などに失敗した際の挙動をかえることができる。 → 例外処理を書く際に利用できる。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away