2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】三項演算子でif文のコードをダイエットしてみた

Last updated at Posted at 2021-01-07

内容

プログラミング言語の演算子のひとつに、三項演算子(条件演算子)という呼ばれるものがあります。
これを使うと、複数行に渡るif文を1行で記述することができるので、モッサリしたコードをダイエットすることができます。

この記事ではRubyのコードで書かれた
「入力された整数が奇数であれば"odd"を、偶数であれば"even"と出力するプログラム」
を題材としながら、if文で書かれたコードをダイエットしていく様を見て頂きます。

まずは、これから書いていくコードのイメージをつくっていきましょう!

if 数字が偶数
  evenと表示
else
  oddと表示
end

以上のような5行に渡るif文を

数字が偶数 ? evenと表示 : oddと表示

と1行で書くことができることが三項演算子の特徴です。

前提環境

MacOS Catalina 10.15.7
Ruby 2.6.6

if ~ else 文

if.rb
n = gets.to_i

if n % 2 == 0
  check_number = "even"
else
  check_number = "odd"
end

puts check_number

このrubyファイルをターミナルで実行すると以下のようになります。
下記の例以外でも奇数であればodd、偶数であればevenが出力されるはずです。

$ ruby if.rb
5                 # 入力
odd         # 出力

$ ruby if.rb
8                 # 入力
even         # 出力

三項演算子

ternary.rb
n = gets.to_i

check_number =  n % 2 == 0 ? "even" : "odd"

puts check_number

三項演算子で書くと以上のようになります。if ~ else 文を利用した場合よりもだいぶスッキリしましたね!
行数で言うと7行→3行となっており半分以下になっております。

念のためターミナルで実行してみましょう。if ~ else 文の時と同様の結果が得られますね。

$ ruby ternary.rb
17                 # 入力
odd          # 出力

$ ruby ternary.rb
24                 # 入力
even          # 出力

三項演算子を学ぶだけであれば以上で終了なのですが、、、
せっかくなのでもう少しダイエットを続けてみましょう!!!!!

if ~ else 文(メソッド定義なし)

if_rev.rb
n = gets.to_i

if n % 2 == 0
  puts "even"
else
  puts "odd"
end

メソッド定義を使わずにif文の中にputsを書きました。
最初のコードより少しだけ短くなっています。

三項演算子(メソッド定義なし)

ternary_rev.rb
n = gets.to_i

puts  n % 2 == 0 ? "even" : "odd"

上記の書き方を三項演算子で書くとこのようなコードになります。
2行になりましたね!ここまで来ると欲が出てきて1行で書いてみたくなりませんか?

三項演算子(最終版)

ternary_final.rb
puts  gets.to_i % 2 == 0 ? "even" : "odd"

1行で、、、書けた!!!!!
もともと7行で書いていたコードが1行になりました。
まさかの85%OFFのダイエット、これにはR○Z○Pさんもビックリですね。

以上、三項演算子を使ったコードのダイエットでした!

追記

2020/01/08
@scivola 様から頂いたご指摘を紹介します(ありがとうございました!)

以下のようにカッコをつけると見やすくなる。

ternary_final.rb
puts (gets.to_i % 2 == 0) ? "even" : "odd"

整数が偶数かどうかを判定するのは Integer#even?が使えるので,

ternary_final.rb
puts gets.to_i.even? ? "even" : "odd"

と書くこともできるとのこと!

@scivola 様ありがとうございました!

2
0
2

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?