2
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?

三項演算子について

Posted at

はじめに

 個人的に「三項演算子」について苦手意識があったので、今回はあえてそれに触れてみます。

環境

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という事を表現したい場合には、三項演算子を使いこなせればコードの短縮化に貢献出来て便利そうです。

参考にさせていただいた記事

2
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
2
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?