【Ruby】if elseの書き方とは
Rubyに触れるプログラミング入門者向けに条件分岐の基本であるif...elsif...else end と thenの使用方法を、サンプルコードを見ながら具体的に解説していきます。
Rubyに触れるプログラミング入門者向けに条件分岐の基本であるif...elsif...else end と thenの使用方法を、サンプルコードを見ながら具体的に解説していきます。
スキルアップ
2020/12/16 UP
- プログラミング
- SE資格・スキル
- Ruby
Rubyの学習を進める場合、プログラミングの基礎となる条件分岐を理解することが大切です。条件分岐は一定の条件によって処理の仕方を分岐させる構文で、その中でもif文はもっとも基礎的な条件分岐となります。
Rubyは開発環境の構築が簡単なので、このような基礎的な構文であれば、自分の環境で実際に触れながら独学で学習するのがおすすめです。
今回は初めてRubyに触れるプログラミング入門者向けに条件分岐の基本であるif...elsif...else end と thenの使用方法を、サンプルコードを見ながら具体的に解説していきます。
Rubyのif文とは
if文は多くのプログラミング言語でも使用されている、基本となる条件分岐の構文です。if文はRubyでアプリケーションを構築には必須となる構文構造なので、Rubyを学習してWebアプリケーション開発の仕事を目指すのであれば、必ず押さえておきましょう。
なお、Rubyのif文は他のプログラミング言語と同様のif文、if-else文、if-elsif-else文ほかに、case文( + then)という記述方法があります。
Rubyで使える比較演算子一覧
比較演算子は2つの値を比較(例a == b)し、その結果を論理値(trueまたはfalse)で返します。if文の条件式にはこの比較演算子が使用されます。Rubyで使用できる比較演算子は以下のとおりです。
演算子 |
処理 |
---|---|
== |
aとbが等しい場合にはtrueを返す。等しくない場合にはfalseを返す。 |
!= |
aとbが等しくない場合にはtrueを返す。等しい場合にはfalseを返す。 |
< |
aよりbが大きい場合にはtrueを返す。aよりbが小さいか等しい場合にはfalseを返す。 |
> |
aよりbが小さい場合にはtrueを返す。aよりbが大きいか等しい場合にはfalseを返す。 |
<= |
aよりbが大きいか等しい場合にはtrueを返す。 |
Rubyで使える論理演算子一覧
複数の条件式によるより複雑な条件分岐をおこなう場合は、論理演算子を使用します。「条件a、かつ、条件b」、「条件a、または、条件b」などの比較演算子を使用した条件式を組み合わせ、2つ以上の条件式を評価し、結果の理論値によって条件を分岐させます。
演算子 |
処理 |
---|---|
&& |
例:条件式a && 条件式b |
|| |
例:条件式a || 条件式b |
! |
例:!条件式a |
Ruby の if文の書き方
それではRubyのif文で使用できる演算子を組み合わせながら、簡単な構造のif文を記述してみましょう。
if文の基本形
if文の基本形は「if 条件 条件が成り立った時に実行したい処理 end」です。
ではサンプルコードを見ていきましょう。ここでは「if 10 > 5」でifの条件式が定義され、もし10が5より大きければ、次の行にある「ここは実行されます」を表示する処理を実行します。実行後はendで処理を終了させることで、条件分岐が終了します。
if 10 > 5 puts 'ここは実行されます' end if 10 <= 5 puts 'ここは実行されません' end
このコードを実行すると、if 10 > 5 ... endだけが実行され、if 10 <= 5 ...endのほうは実行されません。これは10より5が大きくなることはないので、条件式がtrueにならないためです。
if文は直後に書いてある条件式がtrue(真)であれば実行されます。そのため、今回のコードではif 10 > 5の条件式だけがtrueになり、ifの直後に書かれている内容が実行されます。
if else の形
if文の条件式がfalseとなった場合の処理には、他のプログラミング言語のif文と同様にelseを使用します。if文が実行されるとelse文は実行されず、if文が実行されないとelse文が実行されるようになります。
次のサンプルコードではnumberという変数に、0〜9の乱数を代入し、numberが5より小さければifの処理を実行します。ifの条件式に合致しない5以上の場合はelseの処理を実行しています。
number = rand(10) if number < 5 puts number.to_s + 'は5より小さい数' else puts number.to_s + 'は5以上の数' end
if elsif else の形
分岐させる条件を3パターンに増やしたい場合は、elsifで条件文を追加します。複数の条件式が存在するif文では、上から順に条件式を評価してtrueがあれば処理を実行し、以降のブロックにある条件式の評価はおこないません。そのため、条件式が複数ある場合は、より条件が厳しいものを上に記述します。
次のサンプルコードでは、numberという乱数が3未満、8未満、それ以外という条件式を設定し、3未満、3以上8未満、8または9で異なる文字列を表示します。
number = rand(10) if number < 3 puts number.to_s + 'は3より小さい数' elsif number < 8 puts number.to_s + 'は3以上で8より小さい数' else puts number.to_s + 'は8か9しか来ません' end
elsifが複数の場合
elsifは複数追加できます。4パターン以上の条件分岐をおこなう場合は、elsifで条件式と処理を記述します。
次のサンプルコードでは、if...elseに加え、2つのelsifを持っています。elsifを追加する際の注意点は、条件式の評価がifから記述された順におこなわれることと、条件式がtrueになるまで全ての条件式を評価するためあまり多くのelsifを追加するとプログラムの処理が遅くなる点です。
なお、このサンプルでは、numberという変数に、0〜9の乱数を代入し、結果によって3未満、3以上6未満、6以上8未満、8または9の4つの条件に分岐しています。
number = rand(10) if number < 3 puts number.to_s + 'は3より小さい数' elsif number < 6 puts number.to_s + 'は3以上で6より小さい数' elsif number < 8 puts number.to_s + 'は6以上で8より小さい数' else puts number.to_s + 'は8か9しか来ません' end
and や or を使用した複数条件の書き方
複数の条件式を組み合わせた複数条件をif文に使用する場合は、論理演算子を使用します。
and演算子で条件式が「aかつb」になる条件を、or演算子で条件式が「aもしくはb」になる条件を作れます。
次のサンプルコードでは、numberという変数に代入されたrand(10)の結果を評価しています。and文の場合、numberが3以上8以下であればifの処理、3未満であればelsifの処理、9の場合はelseの処理を実行します。or文の場合はnumberが3未満か9の場合はifの処理、3〜8の場合はelseの処理を実行します。
このように複数の条件を設定して分岐することで、さまざまな条件で複雑な挙動をするプログラムを作成できます。
andの場合
number = rand(10) if number >= 3 && number <= 8 puts number.to_s + 'は3以上8以下の数' elsif number < 3 puts number.to_s + 'は3より小さい数' else puts number.to_s + 'は9しか来ません' end
orの場合
number = rand(10) if number < 3 || number > 8 puts number.to_s + 'は3〜8以外の数' else puts number.to_s + 'は3〜8のいずれかの数' end
入れ子(ネスト)させる場合の書き方
ネストは入れ子構造とも呼ばれ、ある記述の中に入れ子構造で別の記述をする方法です。ネストをする場合、ネストする部分をdoとendで囲みます。
最初のifの条件式と一致した場合、さらにネストした次のifの条件式を評価し、真なら実行します。この入れ子構造によって、いくつもの条件式を組み合わせ、複雑な条件分岐を持つプログラムを作ることができます。
次のサンプルコードでは、先ほどandを使用したサンプルコードで紹介したものを入れ子で表現しています。
number = rand(10) if number >= 3 if number <= 8 puts number.to_s + 'は3以上8以下の数' else puts number.to_s + 'は9しか来ません' end else puts number.to_s + 'は3より小さい数' end
Ruby の if文 - 中級編
Rubyにおけるif文の基礎について理解が進んだところで、少し実践に踏み込んだ応用的な記述方法を見ていきましょう。Rubyにはif文と同じ挙動をする三項演算子や、条件によって使用できるcase文があります。
if文の代わりに三項演算子を使う
三項演算子(条件演算子)を使用すると、if文を短くシンプルに記述できます。三項演算子の基本的な記述方法は以下のとおりです。
if 条件 条件式a else 条件b end
このような構造のif文を、以下のようなシンプルな構造に書き換えられます。
条件 ? 条件式a : 条件式b
では、サンプルコードを見てみましょう。どちらも10と5が等しければifの処理を実行、ifがfalseの場合はelseを実行するif文です。
if文の場合
if 10 == 5 puts '10 == 5 は false なのでここは実行されない' else puts 'if側が実行されないので、ここだけ実行される' end
三項演算子の場合
puts 10 == 5 ? '10 == 5 は false なのでここは実行されない' : 'if側が実行されないので、ここだけ実行される'
if文の代わりにcase文を使う
全ての条件式(elseは除く)が== (指定したデータと同値かどうかの判定)を使っている場合は、if文をcase文に置き換えることができます。caseは「〇〇の場合」という意味なので、ある変数が「1の場合」「2の場合」などで処理が分岐します。全ての処理を満たさない場合の処理はelseに記述します。
全ての条件式をtrueになるまで順に処理するif文に対し、条件式の評価を最初におこない、trueに合致する条件を探すcase文のほうが、条件が多い場合は処理が早いと言われています。
次のサンプルコードでは、numberの数字を元に分岐しているif文を、case文に置き換えています。実行結果はどちらも同じ内容になります。
if文の場合
number = rand(10) if number == 3 puts number.to_s + 'は3' elsif number == 6 puts number.to_s + 'は6' elsif number == 8 puts number.to_s + 'は8' else puts number.to_s + 'それ以外' end
上記と同じ条件式をcase文に書き換える場合、次のようになります。
case文の場合
number = rand(10) case number when 3 then puts number.to_s + 'は3' when 6 then puts number.to_s + 'は6' when 8 then puts number.to_s + 'は8' else puts number.to_s + 'それ以外' end
Rubyの基本であるif文をマスターしよう!
プログラミングの基礎となる条件分岐の基本はif文です。if...elsif...elseは実際の開発でも頻繁に使用するため、記述方法や処理の原則について正しく理解しておく必要があります。if文は記述のポイントを押さえることで、プログラムの幅を大きく広げてくれます。簡単な条件式から複雑な条件式まで、さまざまなパターンを使ってみましょう。
三項演算子やcase文など応用的な記述方法も、if文の原則をしっかりと踏まえていれば、決して難しいものではありません。if文の正しい記述方法を身に付け、適切な場面で使えるように練習してみてください。