これは何の解説?
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のオブジェクトを真偽値として評価した場合、
false
とnil
を除く全てのオブジェクトが真として評価される - 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
-
逆に、Rubyの
&&
演算子は「式が偽になることが決定した時点で評価を打ち切る」という動作となります。このような評価方式のことを「短絡評価」と言います。 ↩