if文や分岐処理について

#分岐処理

##順次処理
変数やputsを用いれば、ある程度基本的な計算や画面への出力が出来ます。
しかし、ブログラムとしてはいまひとつ物足りないというのも事実です。
ブログラム中に記速された様々な処理を、その順番とおり実行するだけの処理を、
順次処理(じゅんじしょり）と言います。
![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/5ac8c873-6854-ef01-2a52-c5804f81f6bd.png)
##分岐処理
しかし、ブログラムは、順次処理だけでは出来上がりません。様々な状況に応じて、違った処理を行わなくてはなりません。例えばゲームプログラムを作っているとしたら「もし、敵に当たったらゲームオーバー」などといったような、条件に応じた処理の分岐が必要になります。こういったように、ある条件で処理の流れが変わる処理を、分岐処理(ぶんきしょり)と言います。


![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/15a797e0-59c8-4f6d-0b10-679cd6127cce.png "Qiita")


Ruby言語では、分岐処理を記述するための命令として、if(イフ)という命令が用意されています。ここでは、それについて解説します。


#if文
サンプルプログラム
では、まず手始めに条件分岐の最も基本的な処理である、if文について学んでいくことにしましょう。
if文とは、英語で、「もしも」という意味を表す単語で、「もしも〜だったら...する」といつた処理を行うために用います。まずは、以下のプログラムをみてください。

```1-1.rb
def calculation
 puts "数値を入力"
 a = gets.to_i
 if(a > 0) 
   puts "入力した値は、正の数です。\n"  #正の数だった場合には実行
 end
end
```

プログラムを実行すると、コンソール画面に「数値を入力:」と表示され、
横にカーソルが出て、キーボードからの入カモードに移行します。
ここでキーボードから正の数入力します。

```実行結果1.(正の敗を入力した曜合)
数値を入力:5
入力した値は、正の数です。
```
すると、上のように「入力した値は、正の数です。」と表示されて、プログラムが終わります。
また、同じブログラムでも、0、および負の数を入力すると、次のように何も表示されません。

```実行結果2.(0および負の数を入力した場合)
数値を入力:-
```


次に、条件分岐で用いる、if文の書式について説明します。if女は、次のような書式になっています。

if文の書式

```

if(#条件式)
  #処理
end
```

()内の条件式が成立した時、{}に囲まれた処理を実行するのが、if文です。1-1.rbでは、a>0、つまりaが
0よりも大きい時に条件が成立し、{}内のputs文が実行されるわけです。>は、比較演算子と言います。
比較演算子は、以下のようなものがあります。

#使用例

| 演算子 |    意味    |　 使用例 　| 
|:-----:|:--------:|:------------:|
| >    | より大きい| a > 0        |
| >=   |　以上　 | a >= 0       |
| <    | より小さい|  a < 0         |
| <=   | 以下   |a <= 0|
| ==   | 等しい  | a == 0       |
|!=    | 等しくない|  a  != 0      |

以上より、
このブログラムが、キーボードから入力された数値が正の整数のときは「入力した値は、正の数です。」
と表示され、そうでない場合は何も表示されないのです。
ただ、出来ることならば、正の数以外の値が入力された時にも何らかのメッセージを表示したいものです。そこで、次はそれをできる仕組みを紹介しましょう。

![Qitta](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/17c58dc5-bddf-a417-ed04-9408e598f4f0.png)

##if~else文
・サンプルプログラム
まずは以下のプログラムをみてください。

```1-2.rb
def calculation
 puts "数値を入力"
 a = gets.to_i
 if(a > 0) 
   puts "入力した値は、正の数です。\n"  #正の数だった場合には実行
 else
   puts "入力した値は、正の数ではありません。\n" #0か、負の数だった場合に実行
 end
end
```
このプログラムの実行結果は、実行後の正の整数を入力した場合は変わりません。
しかし、負の数を入力した場合は、以下のような実行結果になります。

```実行結果3.(0および負の数を入力した場合)
数値を入力:-1
入力した値は、正の数ではありません。
```

##else文
ここで出現した、if~else文は、以下のような書式になっています。
if~else文の書式

```
if(条件式)
  #処理①
else
  #処理②
end
```
if文の()内の条件式が満たされた時には、処理①が実行されるのは、if文単体の時と変わりません。
しかし、それ以外の場合、つまり条件式が満たされなかった場合は、else(エルス)文以下の処理②が実行されます。
したがって、このブログラムは、aが正の整数ではない、つまり、0か、負の値であるのならば、「入力した値は、正の数ではありません。」と出力されるのです。
以下のフローチャート
![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/90b1eef5-d816-111f-f5b5-4eaa8ac5d1fc.png)


##elsif文
サンプルプログラム
ifとelseを用いた場合、ある条件が成り立つ場合と、そうでない場合の処理が書けました。
しかし、実際には、条件が複数から成る場合も多く存在します。そういう時はどのようにすればよいのでしょうか?
その時に役立つのが、elsif(エルスイフ)です.まずは、以下のサンプルをみてみましよう。

```1-3.rb
def math
 puts "1~3の値を入力してください："
 num = gets.to_i
 if(num == 1) 
   puts "one\n"  #numが１だった場合の処理
 elsif(num == 2) 
   puts "two\n" #numが2だった場合の処理
 elsif(num == 3) 
   puts "three\n" #numが3だった場合の処理
 else
   puts "不適切な値です。\n" #それ以外の値が入力された場合の処理
 end
end
```

```
実行結果1(1から3の値が入力された場合)
1〜3の値を入力してください:1
one
実行納果2(それ似外の値が入力された場合)
1〜3の値を入力してください:4
不適切な値です。
```
---
実行した結果、１を入力すれば、oneと、２を入力ずればtwo、3を入力ずればthreeと表示されます。
それ以外の値を入力すれば、「1〜3の値を入力してください」とこのifとelseだけでは、
一つの条件が成り立った時と、それ以外の場合の処理しか実行できませんが。elsifを用いれば、複数の条件の場合についての場合分けが可能です。elsifを含むif文の書式は以下の通りになっています。

if~elsif~else 文の書式

```
if(条件式①)
 処理①
elsif(条件式②)
 処理②
else
 処理③
end
```


条件式①が成り立てば処理①が、条件式②が成り立てば処理②が実行され、そのどちらの条件も成り立たなければ、処理③が実行されます。なお、elsifはifの後に<font color="Red">何個</font>でも追加することができます。
なので、いくつでも条件を追加することが可能です。
そのため。1-3.rbの処理の流れを記述すると、以下のようになるのです。

![Qiita](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596221/f6ceadcf-904e-9781-e3d8-948fea2ad0dc.png)


# 複雑なif文
## サンプルプログラム
つぎは、これらの知識を組みあわせて、更に複雑なifの構文を作り上げてみましょう。
まずは、以下のサンプルをみてください。

```list1-4.rb

 def main
  #サイコロの目を入力
  puts "1から６の数値を入力してください:"
  dice = gets.to_i
  # 値がサイコロの目の範囲内かどうかを調べる
  if(1 <= dice && dice <= 6)
    if(dice == 2 || dice == 4 || dice == 6)
     #サイコロの目が、偶数か奇数かで処理を分ける
       puts "丁（チョウです。）\n"   #偶数ならば丁（チョウ）
    else
       puts "半（ハンです。）\n"  #奇数ならば半（ハン）
    end
  else
    puts "範囲外の数値です。\n"
  end
 end
```

このプログラムの実行結果は、大きく分けて3通りに分けられます。まず一つ目が、1から6の間の偶数、
つまり、2,4,6といった値を入力した場合です。以下のように、「丁(チョウ)です。」と表示され、プログラムは終了します。

```実行結果1.(2,4,6が入力された場合)
1から6の数値を入力してください:2
丁(チョウ)です。
```
次に、同じく1から6の間で、今度は、1,3,5といった奇数を入力すると、「半(ハン)です。」と表示され、プロ
グラムは終了します。

```実行結果2.(1,3の,5が入力された場合)
1から6の数値を入力してください:5
丁(チョウ)です。
```

最後に、1から6以外の整数、つまりさいころの目に該当しないような数値を入れると、「範囲外の数値です。」
と表示されて、プログラムが終了します。

```実行結果3.(範囲外の数値が入力された場合)
1から6の数値を入力してください: 10
範囲外の数値です。
```