条件判断(条件分岐)の使い方

Rubyのようなプログラミング言語には、制御構造という仕組みが存在しています。

吉田先生

プログラムの実行について何らかの指定をするイメージです。その中から、今回は条件判断(条件分岐)について学んでいきましょう!


条件判断とは

条件判断とは「Aの条件に当てはまる場合はこの処理を、Aの条件には該当しない場合はこの処理を」というような事を行いたい場合に使用するものです。

この条件判断の代表的なものを3つ挙げてみます。

  • if文
  • unless文
  • case文

では、詳しく見ていきましょう。

if文

プログラムは基本的に書いた順番どおりに実行されるようになっています。しかし、もし○○(条件)であるならば、○○(処理1)を行う。違うのであれば○○(処理2)を行う。という事をしたい場合にこのif文を使います。if文の基本形は以下のような形です。

if  条件 then   #もし ○○(条件) ならば
  処理      #○○を実行
end

thenは省略可能

if ~ end 内に処理をいくつか書くこともでき、上から順に実行されていきます。

そして、elsif や else という風にすれば、条件を増やすこともできます。では実際に皆さんもコードを実行してみましょう!

if.rb

x = 10 #x10を代入
if x < 5 then         #もしx5より小さければ(条件1)
 puts "xは5以下である"     #"xは5以下である"という文字列を出力
elsif x == 5 then         #もしx5が同じなら(条件2)
 puts "xと5は同じである"   #"xと5は同じである"という文字列を出力
else                      #条件1にも条件2にも当てはまらない場合は
 puts "xは5以上である"    #"xは5以上である"という文字列を出力
end
 #=>"xは5以上である"

上から順に条件1にあてはまらない場合は条件2、条件2にも当てはまらない場合は(全ての条件に該当しない場合)「else」の中の処理と進んでいきます。この例の場合は、x=10ですので期待される結果は「xは5以上である」ですね。きちんと期待通りの出力がなされていればOKです!

if修飾子

if修飾子とは今まで挙げてきたようなif文をもっとシンプルに記述することが出来る方法です。書き方としては、

処理 if   条件

と、1行で書けてしまうのでコードがすっきりとしていて見やすいですね。例を挙げてみますと

puts  "xは5以上である" if   x  >  5

このような感じになります。

unless文

このunless文はif文とは反対に、もし○○ではないなら~というものです。ただし、書き方はif文と同じになります。

unless 条件 then
 処理
end

早速試してみましょう!

unless.rb

num = 5          #num5を代入
unless num < 1   #もしnum1より小さくない場合
 puts "numは1より小さくない"    #"numは1よりちいさくない"という文字列を出力
end
 #=>"numは1より小さくない"

numに代入されているのは1より大きな数字の5です。もしnumが1より小さくない(1より大きい)場合という条件にあてはまった時には「numは1より小さくない」が出力されますね。

なお、if文と違い「elsif」は使用できません。しかし、elseは使えますので以下のようなコードが書けます。

unless2.rb

x = 10       #x10を代入

unless x < 50                #もしx50より小さくない場合(条件1)
 puts "xは50より小さくない"   #"xは50より小さくない"と出力
else                         #もし条件1に当てはまらない場合
 puts "xは50より大きくない"   #"xは50より大きくない"と出力
end
 #=>"xは50より大きくない"

このようにelseが使えます。皆さんも試してみてくださいね!このコードは、if文の場合だと

if2.rb

x = 10

if x < 50     #もしxより50の方が大きければ(条件1)                                                                                                                                                     
 puts "xは50より大きくない" 
else          #もし条件1に当てはまらない場合
 puts "xは50より小さくない"
end
 #=>"xは50より大きくない"

このような書き方になります。処理を書く順番が前後しますが結果は同じになりますので実行し確認してください。

*unless修飾子

if修飾子と同じようにunless文ももっとシンプルに記述することが出来る方法です。書き方としては、同じく

処理 unless   条件

と、1行で書きます。x = 10であるとした場合の例を挙げてみますと

puts  "xは5以上である" unless   x  <  5

このような感じになります。

case

条件がいくつも必要である場合は、if を使った方がよい場合もありますが、比較したいオブジェクトが1つのみの場合はcase文を使った方がコードがシンプルになります。

書き方は、

case  比較したいオブジェクト(変数)
when  値1
 処理1
when  値2
 処理2
else
 処理3
end

*thenは省略しています。

となります。このwhen~処理はいくつでも記述することが出来ます。また、以下の様に値の部分を複数指定することも可能となります。その場合は、値を「,」カンマで区切って書くという決まりがあります。ですので

when  値1,値2

という書き方になります。では、実際にコードを実行してみましょう!

case.rb

rank = 2

case rank   #変数rank
when 1      #値が、もし1なら
  puts "No.1"   #"No.1"と出力
when 2   #値が、もし2なら
  puts "No.2"   #"No.2"と出力
else    #値が1でも2でもない場合
  puts "圏外"   #"圏外"と出力
end
 #=>"No.2"

「No.2」と出力されていればOKです。

範囲指定する

ただ、値が沢山ある場合には以下の様に書く事が多いかと思います。例を使って実際のコードを見てみましょう。

case2.rb

age = 10

case  age    #変数age
when  0..19 #値が、もし019ならば
  puts  "未成年"  #"未成年"と出力
when  20..100   #値が、もし20100ならば
  puts  "成人"  #"成人"と出力
else           #値が、もし0100のどれでもないならば
  puts  "年齢は未登録です"
end
 #=>"未成年" 

このように、値「..」値と描くことで範囲指定することが可能となります。コードを実行し結果を見てみましょう。

配列を指定する

そして、配列も指定することが出来てしまいます!例えば

case3.rb

member  =  "高橋"
members_a  =  ["田中", "斎藤", "林"]
members_b  =  ["加藤", "高橋", "森"]

case member
when *members_a 
  puts "高橋さんはmembers_aに所属しています。"
when *members_b
  puts "高橋さんはmembers_bに所属しています。" 
else
  puts "高橋さんはmembersには所属していません。"
end
 #=>"高橋さんはmembers_bに所属しています。" 

このように、値の部分に配列を指定する際は、「*」アスタリスクを付けるという決まりです。この例ですとmemberという変数に代入した"高橋"さんが、配列AB(members)に存在しているかどうかを調べるという事していますね。

真偽とは

真偽値とはオブジェクトと変数・定数でも出てきました、trueやfalseやnilを指しています。これは今回学んだif文等でif~endの中に記述した処理が実行されるかどうかを判断する為のもので、「もし~ならば」という条件にあてはまっている場合は「true(真)」となり処理が実行されます。当てはまらなければ「false(偽)」となり次のコードに移っていきます。

画像の様に真と偽がありその値の「true」や「false」でif文等の中で判断されているという事ですね。

まとめ

条件判断とは条件に当てはまるかどうかで実行する処理を分けることです。

「if文」は「もし〇なら〇という処理、〇ではないなら●という処理」という形で処理を分けます。

「unless文」は「もし〇ではないなら〇という処理、〇なら●という処理」と分け方です。

「case文」は「もし〇なら〇(処理1)、●なら●(処理2)、どちらでもないなら◎」と分けます。

真=「true(falseとnil以外は真)」

偽=「false」と「nil」

無料ビデオ講座のお知らせ

Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る

×