はじめに
個人的に「三項演算子」について苦手意識があったので、今回はあえてそれに触れてみます。
環境
ruby 3.14
rails 7.0.3.1
三項演算子って?
条件式をif, elseを使わないで書いてしまえるもの。
複数に渡ってかかなればならないコードも、これを使えば短いコードで済むのですっきりします。
コードにすると次のようになリます。
条件式 ? 正しいとき : 正しくないとき
これをif,elseで書くとすると次のようになります。
if 条件式
正しいとき
else
正しくないとき
end
以上のように短いコードで済むことが分かります。
ではこれはどのような時に使えば良いのでしょうか?
例
作っているもの→ "ブログを作成するサイト"
コードを書く場所→ Articleモデル
また
”記事(Article)を『下書き(draft)・公開(published)・公開待ち(publish_wait)』としてstateカラムに分類している状態”
加えて、
publishde?メソッドとして
def publishable?
Time.current >= published_at
end
と用意してあるとします。
ここに、“公開可能か判断させるメソッド"を作りたいとします。
これをif文で書くとすると、
def adjust_state
self.state = if publishable?
:published #公開
else
:publish_wait #公開待ち
end
end
これを三項演算子で書くとしましょう。
def adjust_state
self.state = publishable? ? :published : :publish_wait
end
だいぶすっきりしました。
補足
複雑なロジックなど、if文のままの方が良い場合もあるようです。
例えば、
def adjust_state
return if draft?
self.state = if publishable?
:published #公開
else
:publish_wait #公開待ち
end
end
このように return if draft? (stateがdraftの場合はadjust_stateから抜け出させる)
という条件が盛り込まれている場合は、三項演算子でそのまま表現する事は難しいようです。
しかし、シンプルにAでないならBという事を表現したい場合には、三項演算子を使いこなせればコードの短縮化に貢献出来て便利そうです。
参考にさせていただいた記事