1
0

More than 3 years have passed since last update.

if文や分岐処理について

Last updated at Posted at 2020-11-05

分岐処理

順次処理

変数やputsを用いれば、ある程度基本的な計算や画面への出力が出来ます。
しかし、ブログラムとしてはいまひとつ物足りないというのも事実です。
ブログラム中に記速された様々な処理を、その順番とおり実行するだけの処理を、
順次処理(じゅんじしょり)と言います。
Qiita

分岐処理

しかし、ブログラムは、順次処理だけでは出来上がりません。様々な状況に応じて、違った処理を行わなくてはなりません。例えばゲームプログラムを作っているとしたら「もし、敵に当たったらゲームオーバー」などといったような、条件に応じた処理の分岐が必要になります。こういったように、ある条件で処理の流れが変わる処理を、分岐処理(ぶんきしょり)と言います。

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

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

elsif文

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

1-3.rb
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の処理の流れを記述すると、以下のようになるのです。

Qiita

複雑なif文

サンプルプログラム

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

list1-4.rb

 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.(2,4,6が入力された場合)
1から6の数値を入力してください:2
丁(チョウ)です。

次に、同じく1から6の間で、今度は、1,3,5といった奇数を入力すると、「半(ハン)です。」と表示され、プロ
グラムは終了します。

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

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0