0
0

More than 3 years have passed since last update.

if文と論理演算子を組み合わせたときに気をつけたいこと

Posted at

はじめに

 if文と論理演算子を組み合わせたときに、気をつけるべき点があったので、まとめておく。

基本的な記述

if 条件式
 #条件式がtrueのときの処理
else
 #条件式がfalseのときの処理
end

論理演算子

&&→かつ
||→または

if文と論理演算子の組み合わせ

if 条件式1 && 条件式2
 #条件式1と条件式2がtrueのときの処理
else
 #条件式の一つでもfalseがあるときの処理
end

細かくみると、条件式1がfalseの場合、条件式2のコードはそもそも読まれない。
具体的には、


<% if user_signed_in? && @message.user.id == current_user.id %>
<% if @message.user.id == current_user.id && user_signed_in? %>

deviseを用いて、ログイン状態と非ログイン状態で表示を分ける場合、
ログインしていれば、どちらのコードでもエラーは起きない。
しかし、非ログイン状態の場合、
上のコードでは、エラーは起きないが、下のコードだと、エラーになってしまう。

その原因は、@message.user.idcurrent_user.idはログインしている状態でないと、値が入らず、そもそも==で等しいかどうか、判別することができない。
一方、上の式では、user_signed_in?の時点で、非ログイン状態だと、falseが返るので、&&以降のコードを判別に使わずに済む。

0
0
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
0
0