#分岐処理
##順次処理
変数やputsを用いれば、ある程度基本的な計算や画面への出力が出来ます。
しかし、ブログラムとしてはいまひとつ物足りないというのも事実です。
ブログラム中に記速された様々な処理を、その順番とおり実行するだけの処理を、
順次処理(じゅんじしょり)と言います。
##分岐処理
しかし、ブログラムは、順次処理だけでは出来上がりません。様々な状況に応じて、違った処理を行わなくてはなりません。例えばゲームプログラムを作っているとしたら「もし、敵に当たったらゲームオーバー」などといったような、条件に応じた処理の分岐が必要になります。こういったように、ある条件で処理の流れが変わる処理を、分岐処理(ぶんきしょり)と言います。
Ruby言語では、分岐処理を記述するための命令として、if(イフ)という命令が用意されています。ここでは、それについて解説します。
#if文
サンプルプログラム
では、まず手始めに条件分岐の最も基本的な処理である、if文について学んでいくことにしましょう。
if文とは、英語で、「もしも」という意味を表す単語で、「もしも〜だったら...する」といつた処理を行うために用います。まずは、以下のプログラムをみてください。
def calculation
puts "数値を入力"
a = gets.to_i
if(a > 0)
puts "入力した値は、正の数です。\n" #正の数だった場合には実行
end
end
プログラムを実行すると、コンソール画面に「数値を入力:」と表示され、
横にカーソルが出て、キーボードからの入カモードに移行します。
ここでキーボードから正の数入力します。
数値を入力:5
入力した値は、正の数です。
すると、上のように「入力した値は、正の数です。」と表示されて、プログラムが終わります。
また、同じブログラムでも、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 |
以上より、
このブログラムが、キーボードから入力された数値が正の整数のときは「入力した値は、正の数です。」
と表示され、そうでない場合は何も表示されないのです。
ただ、出来ることならば、正の数以外の値が入力された時にも何らかのメッセージを表示したいものです。そこで、次はそれをできる仕組みを紹介しましょう。
##if~else文
・サンプルプログラム
まずは以下のプログラムをみてください。
def calculation
puts "数値を入力"
a = gets.to_i
if(a > 0)
puts "入力した値は、正の数です。\n" #正の数だった場合には実行
else
puts "入力した値は、正の数ではありません。\n" #0か、負の数だった場合に実行
end
end
このプログラムの実行結果は、実行後の正の整数を入力した場合は変わりません。
しかし、負の数を入力した場合は、以下のような実行結果になります。
数値を入力:-1
入力した値は、正の数ではありません。
##else文
ここで出現した、if~else文は、以下のような書式になっています。
if~else文の書式
if(条件式)
#処理①
else
#処理②
end
if文の()内の条件式が満たされた時には、処理①が実行されるのは、if文単体の時と変わりません。
しかし、それ以外の場合、つまり条件式が満たされなかった場合は、else(エルス)文以下の処理②が実行されます。
したがって、このブログラムは、aが正の整数ではない、つまり、0か、負の値であるのならば、「入力した値は、正の数ではありません。」と出力されるのです。
以下のフローチャート
##elsif文
サンプルプログラム
ifとelseを用いた場合、ある条件が成り立つ場合と、そうでない場合の処理が書けました。
しかし、実際には、条件が複数から成る場合も多く存在します。そういう時はどのようにすればよいのでしょうか?
その時に役立つのが、elsif(エルスイフ)です.まずは、以下のサンプルをみてみましよう。
def math
puts "1~3の値を入力してください:"
num = gets.to_i
if(num == 1)
puts "one\n" #numが1だった場合の処理
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
不適切な値です。
実行した結果、1を入力すれば、oneと、2を入力ずればtwo、3を入力ずればthreeと表示されます。
それ以外の値を入力すれば、「1〜3の値を入力してください」とこのifとelseだけでは、
一つの条件が成り立った時と、それ以外の場合の処理しか実行できませんが。elsifを用いれば、複数の条件の場合についての場合分けが可能です。elsifを含むif文の書式は以下の通りになっています。
if~elsif~else 文の書式
if(条件式①)
処理①
elsif(条件式②)
処理②
else
処理③
end
条件式①が成り立てば処理①が、条件式②が成り立てば処理②が実行され、そのどちらの条件も成り立たなければ、処理③が実行されます。なお、elsifはifの後に何個でも追加することができます。
なので、いくつでも条件を追加することが可能です。
そのため。1-3.rbの処理の流れを記述すると、以下のようになるのです。
複雑なif文
サンプルプログラム
つぎは、これらの知識を組みあわせて、更に複雑なifの構文を作り上げてみましょう。
まずは、以下のサンプルをみてください。
def main
#サイコロの目を入力
puts "1から6の数値を入力してください:"
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から6の数値を入力してください:2
丁(チョウ)です。
次に、同じく1から6の間で、今度は、1,3,5といった奇数を入力すると、「半(ハン)です。」と表示され、プロ
グラムは終了します。
1から6の数値を入力してください:5
丁(チョウ)です。
最後に、1から6以外の整数、つまりさいころの目に該当しないような数値を入れると、「範囲外の数値です。」
と表示されて、プログラムが終了します。
1から6の数値を入力してください: 10
範囲外の数値です。