ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

条件判断 if文

今回は条件判断 ifを試す。


目次


if文

ifについてのリファレンスマニュアルは次のとおり。

Rubyリファレンスマニュアル
制御構造 if
https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html

if文の書式は次のとおり。

if 条件 then
    条件が成立したときだけ行う動作
end

(thenは省略できる)

今回は条件に「等しい」を使う。
等しい、の演算子==(イコールをつづけて2つ)。
試しにテストコードを書いてみる。

test.rb

crew = "N会社"

if crew == "N会社"
    puts crew
end

if crew == "M大学"
    puts crew
end


実行結果

N会社


コードの説明。

  • N会社を変数crewに代入する
  • if文の条件判断
    • もしcrewがN会社だったら
    • crewをターミナル/PowerShellに出力する
  • 2番めの条件判断
    • もしcrewがM大学だったら
    • crewをターミナル/PowerShellに出力する


結果は最初のif文のみ実行されている。
2番めのif文は条件が成立していないので無視されて何もおきない(nilという値が返ってくる)。
if文では条件が成立しない場合はエラーにならず無視される(nilが返ってくる)。

else節

今度はelse節を使って条件を分岐させる。
elseはこれまでにつけられた条件以外すべて、という意味になる。
コードを書く。

test.rb

crew = "N会社"

if crew == "M大学"
    puts crew
else
    puts "M大学ではありません。#{crew}です。"
end


実行結果

M大学ではありません。N会社です。


コードの説明。

  • N会社を変数crewに代入する
  • if文で条件をつける
    • crewがM大学ならputsメソッドを実行
  • else節を設定する
    • else節以前の条件が成立しない場合に実行させたい処理を書く


実行結果はelse節の指示が実行されている。

if分の条件、変数crewとM大学が等しい、でないときは何も実行されず先に進む。
else節までに何も実行されないとelse節に書かれたコードが実行される。

eachメソッドとif文を組み合わせる

配列の要素を出力する際に条件判断if文を使う。

rubylesson.rb

#日時や種目をheaderとして配列に格納する
#着順毎にレース結果を配列に格納する。
#更に各配列を1つの配列に格納して変数race_resultsに代入する
race_results = [
    ["header","10/29 14:20","男子舵手つきフォア","決勝"],
    [1,"M大学","06:39.42"],
    [2,"K大学","06:40.54"],
    [3,"N大学","06:47.69"],
    [4,"T大学","06:50.95"]
]

#eachメソッドでrace_resultsから要素(配列)を1件ずつ取り出す
race_results.each do |result|
    if result[0] == "header" #もし左端の要素がheaderなら
        puts "#{result[1]}\n#{result[2]} #{result[3]}" #headerの出力
    else
        puts "#{result[0]} #{result[1]} #{result[2]}" #headerでない場合の出力
    end
end


実行結果

10/29 14:20
男子舵手つきフォア 決勝
1 M大学 06:39.42
2 K大学 06:40.54
3 N大学 06:47.69
4 T大学 06:50.95


コードの説明。

  • 変数race_resultsに5つの要素(配列)を格納する
  • eachメソッドでrace_resultsの要素を1つずつ取り出す
  • if文で左端にheaderがある場合の出力書式を指示する
    • 1件目の要素(配列)は左端にheaderが格納されているので、header用の書式で出力される
  • else節でheaderがないときの出力書式を指示する
    • 2件目以降はheaderがないので、else節に書かれた書式で出力される


header用の書式には改行記号の\nを使った。
eachメソッドのブロックとif文を入れ子(ネスト)にした。

if文を使うことで種類の違いに合わせて出力の書式を変えることに成功。

今回の動作確認環境

Ruby 2.4.3p205

macOS 10.13.3
ターミナル

Windows10
Windows PowerShell