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

redirect_toメソッドの引数内で || 演算子を用いる。その動作の解説(Railsチュートリアル 第10章より)

Last updated at Posted at 2019-11-20

これは何の解説?

Railsチュートリアル第10章内、フレンドリーフォワーディングの実装redirect_back_orメソッドの実装において出現する「redirect_toメソッドの引数内で||を用いたコードの動作解説」となります。

解説

session[:forwarding_url] || default

上記はredirect_toの引数です。||演算子を用いることによって、以下の動作を実現しています。

  • session[:forwarding_url]nilでなければsession[:forwarding_url]を返す
  • session[:forwarding_url]nilであればデフォルトのURLを返す

しかし、||演算子でこのような動作が実現できるのはなぜでしょうか。それを説明するためのポイントは以下です。

  • Rubyのオブジェクトを真偽値として評価した場合、falsenilを除く全てのオブジェクトが真として評価される
  • Rubyの||演算子は、式が真になることが決定した時点で評価を打ち切る1

Railsチュートリアルのサンプルアプリにおける一時cookiesの使い方では、session[:forwarding_url]falseになることはありません。session[:forwarding_url]を真偽値として評価した結果が偽となるのは、session[:forwarding_url]nilである場合に限られます。

結果、上記コードは以下のようなコードと同様の動作となります。

unless session[:forwarding_url].nil?
  session[:forwarding_url]
else
  default
end
  1. 逆に、Rubyの&&演算子は「式が偽になることが決定した時点で評価を打ち切る」という動作となります。このような評価方式のことを「短絡評価」と言います。

3
1
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
3
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?