Rubyのようなプログラミング言語には、制御構造という仕組みが存在しています。
プログラムの実行について何らかの指定をするイメージです。その中から、今回は条件判断(条件分岐)について学んでいきましょう!
条件判断とは「Aの条件に当てはまる場合はこの処理を、Aの条件には該当しない場合はこの処理を」というような事を行いたい場合に使用するものです。
この条件判断の代表的なものを3つ挙げてみます。
では、詳しく見ていきましょう。
プログラムは基本的に書いた順番どおりに実行されるようになっています。しかし、もし○○(条件)であるならば、○○(処理1)を行う。違うのであれば○○(処理2)を行う。という事をしたい場合にこのif文を使います。if文の基本形は以下のような形です。
if 条件 then #もし ○○(条件) ならば
処理 #○○を実行
end
*thenは省略可能
if ~ end 内に処理をいくつか書くこともでき、上から順に実行されていきます。
そして、elsif や else という風にすれば、条件を増やすこともできます。では実際に皆さんもコードを実行してみましょう!
if.rb
x = 10 #xに10を代入
if x < 5 then #もしxが5より小さければ(条件1)
puts "xは5以下である" #"xは5以下である"という文字列を出力
elsif x == 5 then #もしxと5が同じなら(条件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 条件
と、1行で書けてしまうのでコードがすっきりとしていて見やすいですね。例を挙げてみますと
puts "xは5以上である" if x > 5
このような感じになります。
このunless文はif文とは反対に、もし○○ではないなら~というものです。ただし、書き方はif文と同じになります。
unless 条件 then
処理
end
早速試してみましょう!
unless.rb
num = 5 #numに5を代入
unless num < 1 #もしnumが1より小さくない場合
puts "numは1より小さくない" #"numは1よりちいさくない"という文字列を出力
end
#=>"numは1より小さくない"
numに代入されているのは1より大きな数字の5です。もしnumが1より小さくない(1より大きい)場合という条件にあてはまった時には「numは1より小さくない」が出力されますね。
なお、if文と違い「elsif」は使用できません。しかし、elseは使えますので以下のようなコードが書けます。
unless2.rb
x = 10 #xに10を代入
unless x < 50 #もしxが50より小さくない場合(条件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
このような感じになります。
条件がいくつも必要である場合は、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 #値が、もし0~19ならば
puts "未成年" #"未成年"と出力
when 20..100 #値が、もし20~100ならば
puts "成人" #"成人"と出力
else #値が、もし0~100のどれでもないならば
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 [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。