内容
プログラミング言語の演算子のひとつに、三項演算子(条件演算子)という呼ばれるものがあります。
これを使うと、複数行に渡る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 文
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 # 出力
三項演算子
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 文(メソッド定義なし)
n = gets.to_i
if n % 2 == 0
puts "even"
else
puts "odd"
end
メソッド定義を使わずにif文の中にputs
を書きました。
最初のコードより少しだけ短くなっています。
三項演算子(メソッド定義なし)
n = gets.to_i
puts n % 2 == 0 ? "even" : "odd"
上記の書き方を三項演算子で書くとこのようなコードになります。
2行になりましたね!ここまで来ると欲が出てきて1行で書いてみたくなりませんか?
三項演算子(最終版)
puts gets.to_i % 2 == 0 ? "even" : "odd"
1行で、、、書けた!!!!!
もともと7行で書いていたコードが1行になりました。
まさかの85%OFFのダイエット、これにはR○Z○Pさんもビックリですね。
以上、三項演算子を使ったコードのダイエットでした!
追記
2020/01/08
@scivola 様から頂いたご指摘を紹介します(ありがとうございました!)
以下のようにカッコをつけると見やすくなる。
puts (gets.to_i % 2 == 0) ? "even" : "odd"
整数が偶数かどうかを判定するのは Integer#even?が使えるので,
puts gets.to_i.even? ? "even" : "odd"
と書くこともできるとのこと!
@scivola 様ありがとうございました!