条件によって処理を分けるためには成り立っていれば「true」成り立っていなければ「false」となるような式をまず用意します。ちなみにそれぞれ「トゥルー」、「フォルス 」と読みます。
今回は比較演算子を簡単に説明していきます。
1 2 3 4 5 6 |
p 1 == 1 #=> true p 2 == 1 #=> false p 2 > 1 #=> true p 2 < 1 #=> false p 2 >= 2 #=> true p 2 <= 2 #=> true |
1、2行目にある「==」は右の値と左の値が同一であるかを比較します。代入を意味する「=」とは違いますので混同しないように注意しましょう。右と左の値が同じであれば「true」異なっていれば「false」を返します。
3以降は不等号となり、大きいか小さいかで「true」「false」を判断しています。5、6行目はそれぞれ「≧」「≦」と同じ意味になります。
条件判断の構文
「true」「false」などの結果を条件判断文によって処理を分けることができます。Rubyでは3つの条件判断文があります。
- if(イフ)
- unless(アンレス)
- case(ケース)
if文
ifは良く使われる条件判断文で1番基本的なものとなります。式の結果true(真)だった場合は実行され、false(偽)の場合は処理が行われません。書き方は下のようになります。
1 2 3 |
if 条件 then 実行内容 end |
条件には「true」「false」など判断できるような式を入れて、その結果で実行内容が変わります。具体的には下のように条件をいれていきます。
1 2 3 4 |
one = 1 if one == 1 then puts "oneは1です" end |
oneは1です
この場合oneに1を代入していますので、「==」で比較された結果「true」となります。すると実行内容「then」~「end」に記述されているコードの処理が行われます。今回の場合はputsメソッドで、「”oneは1です”」という文字列を出力しています。もし、oneに2を代入したらどうなるでしょうか。実行結果は下のようになります。
1 2 3 4 |
one = 2 if one == 1 # thenは省略しました puts "oneは1です" end |
(なし)
この場合は、oneが2なので比較した結果、「false」を返してきます。すると実行内容はスルーされて何も行われずスクリプトが終了します。ちなみに「then」は省略可能です。
条件が成り立たない方の処理
条件が成り立った場合と、成り立たなかった場合の処理の両方を書きたい場合は下記のように「else」を入れます。そうすることで条件が成り立たなかった場合の処理も行うことができます。また、elseは「エルス」と読みます。
1 2 3 4 5 6 |
one = 2 if one == 1 puts "oneは1です" else puts "oneは1ではありません" end |
oneは1ではありません
複数条件を分けたい場合
「elsif」を入れてあげると複数の条件で処理を分けることができます。elsifは「エルスイフ」と読みます。
1 2 3 4 5 6 7 8 |
num = 2 if num == 1 puts "numは1です" elsif num == 2 puts "numは2です" else puts "numは1、2ではありません" end |
numは2です
numは2なので2行目の条件「num == 1」では「false」となり処理はスルーされます。そして4行目の条件「num == 2」が「true」となり処理が実行されます。4行目が「true」となったため6行目の「else」の処理は行われず、「numは2です」のみ表示されます。
また、このように比較を行うものが1つしかない場合は「case文」でも同じような処理を行うことができ、スッキリとして読みやすい文になります。
unless文
if文ではtrue(真)だった場合に処理が実行されましたが、unless文ではfalse(偽)だった場合に実行されることになります。書き方は下のような感じです。
1 2 3 |
unless 条件 then 実行内容 end |
基本的な書き方はif文と同じです。まずは簡単なスクリプトをみていきましょう。
1 2 3 4 |
one = 2 unless one == 1 then puts "oneは1ではありません" end |
oneは1ではありません
この場合ではoneに2が代入されていますので、「one == 1」の判定でfalse(偽)となります。unless文は条件がfalse(偽)となるときに実行されるので「”oneは1ではありません”」の文字列が表示されることとなります。oneに1を代入した場合は下記のように何も行われません。
1 2 3 4 |
one = 1 unless one == 1 # thenは省略しました puts "oneは1ではありません" end |
(なし)
この場合、「one == 1」での比較結果がtrue(真)となったため処理は行われません。またif文と同じように「then」は省略することもできます。false(偽)とならなかった場合に実行したい内容は「else」の後に書きます。
1 2 3 4 5 6 |
num = 1 unless num == 1 # thenは省略しました puts "numは1ではありません" else puts "numは1です" end |
numは1です
上記のような処理は実際のところif文でも行うことが可能です。また、unless文を使った結果、2重否定となる場合はどのように処理されるのか読みづらくなることもあるので注意が必要です。
case文
比較したいオブジェクト(変数)が1つだけの場合はcase文を使うことができます。書き方は下のようになります。
1 2 3 4 5 6 7 8 |
case オブジェクト(変数) when 値1 then 実行内容 when 値2 then 実行内容 else すべての値に当てはまらなかった場合 end |
case文でも「then」を省略することができ、「when」では値をいくつでも増やすことができます。また、先ほど説明した複数条件が指定されている「if文」は下のようにも書くこともできます。
1 2 3 4 5 6 7 8 9 |
num = 2 case num when 1 then # thenは省略可能です puts "numは1です" when 2 puts "numは2です" else puts "numは1、2ではありません" end |
numは2です
実行結果は先程の「if文」と同じですが、値が一致するかだけでなく、正規表現の場合はマッチしたかなど判定が少しだけ緩くなります。
コメントを残す