これは何の解説?
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の
&&演算子は「式が偽になることが決定した時点で評価を打ち切る」という動作となります。このような評価方式のことを「短絡評価」と言います。 ↩