こんにちは!
ぱんだまにあです😊
本日は三項演算子について記載します!
まずは普通にif文を書いていきます。
[386] pry(main)> def calc [386] pry(main)* a = [1,2,3,4,5] [386] pry(main)* if a.shuffle.first == a[0] [386] pry(main)* "#{a[0]}でした" [386] pry(main)* else [386] pry(main)* "#{a[0]}ではありませんでした" [386] pry(main)* end [386] pry(main)* end => :calc
上記はメソッドの中でif文を書いています。
そしてaをシャッフルさせて要素の先頭が1ならtrueを返しますので
"1でした"と言う文字列が返ります。
逆に要素の先頭が1以外だとfalseが返りますので
"1ではありませんでした"と言う文字列が返ります。
って言うメソッドですね😊
calcと打ち込むだけなので簡単に検証出来ますので何回か連打します!
[388] pry(main)> calc => "1でした" [389] pry(main)> calc => "1ではありませんでした" [390] pry(main)> calc => "1でした" [391] pry(main)> calc => "1ではありませんでした" [392] pry(main)> calc => "1でした" [393] pry(main)> calc => "1でした" [394] pry(main)> calc => "1ではありませんでした" [395] pry(main)> calc => "1ではありませんでした" [396] pry(main)> calc => "1ではありませんでした"
if文が機能していますね!
三項演算子を使ってみよう
では早速上記のif文を三項演算子を使って書き換えます!
[401] pry(main)* a = [1,2,3,4,5] [401] pry(main)* a.shuffle.first == a[0] ? "#{a[0]}でした" : "#{a[0]}ではありませんでした" [401] pry(main)* end
こんな感じで書きます!
[403] pry(main)> calc => "1ではありませんでした" [404] pry(main)> calc => "1ではありませんでした" [405] pry(main)> calc => "1ではありませんでした" [406] pry(main)> calc => "1ではありませんでした" [407] pry(main)> calc => "1ではありませんでした" [408] pry(main)> calc => "1でした" [409] pry(main)> calc => "1ではありませんでした" [410] pry(main)> calc => "1ではありませんでした" [411] pry(main)>
ちゃんと分岐出来てそうですね!
三項演算子の解説
初めて三項演算子をみた方からすると?や:等見慣れない記号があってびっくりされたかもしれません。
三項演算子は下記の通り定義します。
条件式 ? trueの処理 : falseの処理
ここでは
条件式 はa.shuffle.first == a[0]
trueの処理 は"#{a[0]}でした"
falseの処理 は"#{a[0]}ではありませんでした"
って事になります!
個人的には見慣れてしまえばこっちのもんって感じです😊
each文と組み合わせる
以下、普通にif文を使用した例です。
[4] pry(main)> arr = (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [5] pry(main)> odd_arr = [] => [] [6] pry(main)> even_arr = [] => [] [7] pry(main)> arr.each do |n| [7] pry(main)* if n.odd? [7] pry(main)* odd_arr << n [7] pry(main)* else [7] pry(main)* even_arr << n [7] pry(main)* end [7] pry(main)* end => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [8] pry(main)> odd_arr => [1, 3, 5, 7, 9] [10] pry(main)> even_arr => [2, 4, 6, 8, 10]
では三項演算子を組み合わせた例を見てみましょう!
[1] pry(main)> arr = (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [2] pry(main)> even_arr = [] => [] [3] pry(main)> odd_arr = [] => [] [4] pry(main)> arr.each do |n| [4] pry(main)* n.odd? ? odd_arr << n : even_arr << n [4] pry(main)* end => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [5] pry(main)> odd_arr => [1, 3, 5, 7, 9] [6] pry(main)> even_arr => [2, 4, 6, 8, 10]
三項演算子を使用すると比較的コンパクトになりました。
複雑なif文でない限りコードの見通しを良くする為にも積極的に使用していきたいですね!
簡単な例
最後に簡単な三項演算子の例を記載して終わりになります!
[412] pry(main)> 1 + 1 == 2 ? "1です" : "1ではない" => "1です"
これも立派な三項演算子で非常に簡単な例ですね!
ここでは 条件式 == 1 + 1 == 2 trueの処理 == "1です" falseの処理 == "1ではない"
になります。
逆にfalseの処理も見てみましょう。
[414] pry(main)> 1 + 1 == 3 ? "1です" : "1ではない" => "1ではない"
簡単ですね!
ではでは勉強頑張りましょう!