こんにちは! フリーランスの桃太郎です。
この記事ではRubyのif文について分かりやすく解説をすすめていきます。if文の基本的なことから実践的なことまでを一通りマスターできるように、本記事を作成しました。
その為、本記事を読み終わる頃には、あなたはRubyのif文をきちんと整理して理解していることでしょう。そして、ぜひ本記事をブックマークして、使い方を忘れた時はすぐに確認できるようにしておくことをオススメします。
この記事では
- if文の基本的な書き方
- if else文で複数の条件を処理する方法
- or演算子で「AもしくはB」条件を実現する
- nilかどうかを判定する
などの基本的な内容から応用的かつ実践的な内容を順に解説していきます。それでは、一緒に学習を進めていきましょう。
if文の基本
まずはif文の基本をみていくことにしましょう。
if文の基本的な書き方
基本的な書き方は以下の通りです。
if 条件 then 処理 end
ifは日本語で「もし」、thenは「そのときは」と訳することができます。
つまり、もし「条件」が満たされる、「そのときは」、「処理」を実行して終了(end)する。という流れになります。
具体的なサンプルで確認してみましょう。
# サンプルa
# ユーザがお酒を飲める年齢かどうか判定する処理 age = 18 # ユーザの年齢 if age < 20 then puts "あなたは未成年です。" end
# 実行結果
あなたは未成年です。
“条件”にあたる部分が「 age < 20 」の箇所です。
今回は変数ageには’18’が入っていますので、「 18 < 20 」は数式として正しく、条件を満たしたので、その下にある処理(puts 〜)が実行されました。
ageの箇所を20以上の数値に変えて、実施すると「あなたは〜」の文字が出てこないことをご自身の環境で確認してみてください。
以上が、基本的なif文の形ですが、以下のように書くこともできます。
# サンプルb
age = 18 if age < 20 # thenを省略 puts "あなたは未成年です。" end
# サンプルc
age = 18 # ユーザの年齢 puts "あなたは未成年です。" if age < 20 # if文を後ろに配置する
サンプルb,cともに出力結果はサンプルaと同一です。
それぞれ、基本的な形に比べて、プログラムコードの書く量を少なくできたり、1行にまとめることができるなどの特徴があります。どの書き方を選ぶかはプログラムを書く人の好みや開発チームの方針により様々です。
どのような場面でも柔軟にプログラムを読み書きできるように、上記のバリエーションを知っておくと良いでしょう。
基本的なif文の書き方の最後の締めとして、if文の結果を変数に代入する書き方をご紹介します。
まずはサンプルをご覧ください。
# サンプルd
age = 18 # if文の結果をresultに代入 result = if age < 20 "あなたは未成年です。" end puts result
if文( if から end まで)の出力結果を変数resultに代入し、最後にputsでその中身を表示しています。
このようにif文の処理結果を後ろに続く処理で活用したい場合などには便利な使い方となりますので覚えておくと良いでしょう。
if else文で複数の条件を処理する方法
前の章で解説した基本形では、if文の条件を満たす場合のみif文の中の処理が行われる書き方でした。
ただ、条件を満たさないときにも別の処理を行いたい場合もあります。そのような時に使うのが「if else文」、そして「if elsif 文」です。
まずは文の構成を確認しましょう。
# if else 文の構成
if 条件 条件を満たす場合の処理 else 条件を満たさない場合の処理 end
# if elsif 文の構成
if 条件イ 条件イを満たす場合の処理 elsif 条件ロ 条件ロを満たす場合の処理 elsif 条件ハ 条件ハを満たす場合の処理 else 条件イ、ロ、ハを全て満たさない場合の処理 end
elseのあとは”条件を満たさない”時に行いたい処理を書くのがポイントです。また、elsif は複数の異なる条件によって処理を分けたい場合に活用します。
そして、elsifは上に書かれている条件から順番に条件を満たすか判定を行い、満たした時点でその後ろにある条件式の判定は実行されません。
それでは、具体的なサンプルコードで確認していきましょう。
# if else 文のサンプル
age = 23 if age < 20 puts "あなたは未成年です。" else puts "あなたはすでに大人の仲間入りです。" end
# 実行結果
あなたはすでに大人の仲間入りです。
# if elsif 文のサンプル
age = 60 if age < 20 puts "あなたは未成年です。" elsif 60 <= age puts "あなたは還暦を迎えられています。" else puts "あなたは成人です。" end
# 実行結果
あなたは還暦を迎えられています。
実際に上のサンプルにある変数ageの値を色々と変更して、どのputs処理が行われるか確認すると理解が深まるので是非試してみてください。
そして、ここで気をつけるポイントをお伝えします。Ruby以外のプログラミングを学んでいる方は特に注意すべきポイントになります。
それは、elsifという文字のつづりです。他のプログラム言語では、「else if」という書き方がよくあるのですが、Rubyではelsifと書きますので覚えておきましょう。
それでは本章の最後に、elsifと関連性の強いcase文について軽くご紹介します。elsifとcase文は複数の条件を扱うという点でとても良く似ています。
サンプルコードでそれぞれの処理の流れを比較してみましょう。
# elsif文
blood_type = "B" if blood_type == "A" puts "几帳面な性格ですね" elsif blood_type == "B" puts "マイペースと言われませんか?" elsif blood_type == "O" puts "協調性がありますね" elsif blood_type == "AB" puts "好奇心が旺盛な性格ですね" else puts "血液型を調べてみませんか?" end
# case文
blood_type = "B" case blood_type when "A" then puts "几帳面な性格ですね" when "B" then puts "マイペースと言われませんか?" when "O" then puts "協調性がありますね" when "AB" then puts "好奇心が旺盛な性格ですね" else puts "血液型を調べてみませんか?" end
# 実行結果(両方のサンプルともに)
マイペースと言われませんか?
使われている語句(caseやwhen)の違いはもちろんありますが、elsif文とcase文の構成はとても似ていることがわかりますね。
case文についてより詳しく知りたい方は以下の記事も参考にしてみると良いでしょう。
unlessを使い「〜では無い場合」の条件を処理する方法
基本編の最後に登場するのは、「もし仮に〜では無い場合」を実現するunless文についてご紹介します。
「もし仮に〜では無い場合」ときくと、少しまわりくどい条件に感じ、そもそもif文だけで良いのではと感じる方もいるかもしれませんね。
ですが、もし条件を満たさない時の処理だけを記述したい場合などは、このunless文を使うことを検討します。
では、サンプルをみてみましょう。
member_type = "premium" unless member_type == "normal" puts "通常会員ではありません。" # プレミアム会員向けの処理が続く、、 end
# 実行結果
通常会員ではありません。
上記のサンプルのように、通常会員以外の場合は、セール商品の値引額を変更したり、特別な情報をメールで送るなどの処理へ続けるための最初の判定にunlessを活用しています。
また、unlessではelseと併用することも可能です。
ただし、elsifとは併用できず、エラーとなりますので注意が必要です。
member_type = "normal" unless member_type == "normal" puts "通常会員ではありません。" # プレミアム会員向けの処理が続く、、 else puts "通常会員です。" end
# 実行結果
通常会員です。
そして、unlessの使い方をif文で代用するために、以下のサンプルのような書き方も可能です。
member_type = "premium" if not member_type == "normal" puts "通常会員ではありません。" # プレミアム会員向けの処理が続く、、 end
# 実行結果
通常会員ではありません。
unlessの箇所に「 if not 」と書くことで同様の処理が実現できます。また、if not はelsifを正常に併用できる点がunelssと異なるところです。
if文の応用
では、次にif文の使い方についてより応用的な内容を解説していきましょう。
or演算子で「AもしくはB」条件を実現する
例えば、移動手段が電車かバスの場合は経費の精算を行う処理をif文で実現するとします。
このようにAかBかのいずれかの条件を満たすかどうか判定するためには、or もしくは || という記号を使います。この記号のことを論理演算子と呼びます。
具体的にサンプルで確認してみましょう。
transportation = "train" if transportation == "train" or transportation == "bus" puts "経費精算の対象です。" # 経費精算処理に続く end transportation_2 = "bus" if transportation_2 == "train" || transportation_2 == "bus" puts "経費精算の対象です。" # 経費精算処理に続く end
# 実行結果
経費精算の対象です。 経費精算の対象です。
このように複数の条件を合わせて一つの判定式とすることができるのが、論理演算子の特徴です。
and演算子で「AかつB」条件を実現する
では次に、他の論理演算子として良く使われるものがand演算子です。こちらはAもBの両方の条件を満たして初めて満たすという判断になるものです。
# 通勤手当対象者かを勤続年数と通勤時間で判断する carrier = 5 #勤続年数5年 commuting_time = 2 #通勤時間2時間 if carrier > 3 and commuting_time > 1.5 puts "通勤手当対象者です。" # 通勤手当処理に続く end # &&を使用した例 carrier_b = 10 commuting_time_b = 0.5 if carrier_b > 3 && commuting_time_b > 1.5 puts "通勤手当対象者です。" # 通勤手当処理に続く else puts "対象外です。" end
# 実行結果
通勤手当対象者です。 対象外です。
上のサンプルのように、and もしくは && という論理演算子を使用することで、「AかつB」条件を実現できます。
nilかどうかを判定する
プログラムにおいて、オブジェクト(データや処理内容を入れることができる箱のようなもの)が存在しないことを表現する為の値として nil があります。
この nil の状態なのかどうかを判定する方法が if 文とよく一緒に利用されるので、ここでご紹介します。
# 会員さんの個人情報として名前と年齢が配列データとして存在 member_010 = { "name" => "tanaka", "age" => "25" } if member_010["birth"].nil? puts "誕生日に関するデータは存在しません。" end
# 実行結果
誕生日に関するデータは存在しません。
nil? という箇所に注目してください。
はてなを付けることで、nil状態ですか?と判定することができます。そして、その結果を元にif文で処理を行うプログラミングの実践例が多いので、覚えておくと良いでしょう。
さらに詳しくnil?について知りたい方は以下の記事を参考にしてください。
三項演算子を使い1行にコードをまとめる方法
本記事の最後に、三項演算子なるものをif文と関連してご紹介します。
ポイントとしては三項演算子を使うと、if文の記述内容が1行でスッキリまとめて書くことができます。
age = 23 # 通常のif文 result = if age < 20 "あなたは未成年です。" else "あなたはすでに大人の仲間入りです。" end puts result # 三項演算子で書いた場合 result_b = age < 20 ? "あなたは未成年です。" : "あなたはすでに大人の仲間入りです。" # 1行にまとまる puts result_b
ただし、今回は”あなたは未成年です。”など処理結果が短い文字列を出すだけの場合であれば、三項演算子で見やすくなりますが、処理結果が複雑なものの場合は、if文を利用したほうが読みやすいプログラムコードになります。
三項演算子について詳しく知りたい方は以下の記事を参考にしてみるのも良いでしょう。
まとめ
今回はrubyのif文について基本から応用まで一気にご紹介しました。
if文には条件がいくつ必要なのか、条件を満たさない場合も必要なのか、もしくは条件を満たさないことを期待した処理を書く必要があるのか、など様々なケースに対応する構文がありました。
if else や elsif そして、unlessや if notなど関連する条件判断の書き方は色々とありますが、ひとつひとつ実際に自分の手で動かして試してみることがマスターへの近道です。
そして、ぜひ本記事をブックマークして、if文の使い方を忘れた時はすぐに確認できるようにしておくことをオススメします。もし今後、if文に関して迷うことがあれば、ぜひこの記事を思い出して下さいね。