(初心者向け)Rubyの基本文法(条件分岐)

投稿者: | 2019-09-29
Table of Content

これからRubyの勉強を始めようと考えているあなたに、Rubyのプログラムの書き方を紹介します。

この記事では、Rubyでの条件分岐(if文、case文、unless文)の使い方について解説します。

プログラムでの条件分岐

プログラムでは、変数の条件によって処理を分けたいという状況が多くあります。

例えば、

  • Webサービスで、会員のランク(無料会員と有料会員)で使える機能を分けたい
  • 変数の値がマイナスの時は0として処理したい

などが挙げられます。

このように変数の条件によって、処理を分岐させることを条件分岐と言います。

rubyでは、この条件分岐を行う文法に大きく3種類の書き方があります。

  • if
  • case
  • unless

の3種類です。

それぞれの文法について、解説していきます。

if文

変数が条件を満たす時に、ブロック内の処理を実行するのがif文です。

プログラムの構文は以下のようになります。

条件式を満たす時(trueの時)のみ、thenからendまでのブロックに書かれた処理が実行されます。

if 条件式 then
    条件式を満たした時(true)に実行する処理
end

例えば、変数の値が0より大きい場合のみ変数から1を引くという処理を行う場合は、

以下のように書きます。

a = 5
if a > 0 then
    a -= 1
end
puts(a) # 4が出力される

if文では条件式を満たす時(trueの時)の処理の他に、条件式を満たさなかった時(falseの時)に実行する処理を書くことが可能です。

プログラムの構文は以下のようになります。

if 条件式 then
    条件式を満たした時(true)に実行する処理
else
    条件式を満たさなかった時(false)に実行する処理
end

例えば、変数の値が、0より大きい場合のみ変数から1を引くという処理を行い、0以下の場合は変数に1を加えるという処理は、

以下のように書くことができます。

a = -3
if a > 0 then
    a -= 1
else
    a += 1
end
puts(a) # -2が出力される

また、if文では複数の条件を設定してそれぞれの条件式を満たした時に、処理を行うことが可能です。

プログラムの構文は以下のようになります。

if 条件式1 then
    条件式1を満たす時(true)の処理
elsif 条件式2 then
    条件式2を満たす時(true)の処理
elsif 条件式3 then
    条件式3を満たす時(true)の処理
else
    どの条件式も満たさない時(false)の処理
end

例えば、

  • 変数が2の倍数の場合
  • 変数が3の倍数の場合
  • 変数が2と3の倍数の場合

のそれぞれの場合で処理を行う場合を考えてみます。

単純に上の条件をそのまま書くと、

a = 2
if a % 2 == 0 then
    puts("2の倍数です")
elsif a % 3 == 0 then
    puts("3の倍数です")
elsif (a % 2 == 0) & (a % 3 == 0) then
    puts("2と3の倍数です")
else
    puts("2の倍数でも3の倍数でもありません")
end

となります。上記の例では、aは2なので、「2の倍数です」というメッセージが表示されます。

今度は、aが6の場合は、どうなるでしょうか?

6は2と3の倍数なので、「2と3の倍数です」というメッセージが出て欲しいと思います。

しかし、上の書き方だと、「2の倍数です」というメッセージが表示されてしまいます。

if文で複数の条件式を書いた場合、一番はじめに条件式を満たした時の処理が実行されます。

上記の例だと、

elsif (a % 2 == 0) & (a % 3 == 0) thenの前に、a % 2 == 0の条件式を満たすので、

「2の倍数です」というメッセージが表示されてしまいます。

これを避けるためには、(a % 2 == 0) & (a % 3 == 0)の条件式を先に書く必要があります。

書き直すと以下のようになります。

a = 6
if (a % 2 == 0) & (a % 3 == 0) then
    puts("2と3の倍数です")
elsif a % 2 == 0 then
    puts("2の倍数です")
elsif a % 3 == 0 then
    puts("3の倍数です")
else
    puts("2の倍数でも3の倍数でもありません")
end

if文で複数の条件式を書く場合は、複数の条件式を満たすような変数の場合に注意して書きましょう。

case文

if文では、条件式を組み合わせて複雑な分岐を行うことができます。

しかし、プログラムでは、1つの変数の値に応じて、処理を変更するという状況も多くあります。

そのような状況の時には、if文を使って書くこともできますが、case文という構文を使うと便利です。

構文は以下のようになります。

case 対象オブジェクト
when 値1 then
    値1と一致する場合の処理
when 値2 then
    値2と一致する場合の処理
when 値3 then
    値3と一致する場合の処理
else
    どの値とも一致しない場合の処理

例えば、ユーザーのステータスに応じて、処理を変えるような処理は以下のようにかけます。

status = "プレミアム会員"
case status
when "無料会員" then
    puts("無料会員です。")
when "プレミアム会員" then
    puts("プレミアム会員です。")
else
    puts("不正な会員ステータスです。")
end

ある変数に対して、値に応じて処理を行うという場合は、case文を使った方が見た目もスッキリしますし、値に応じた処理であることが分かりやすいのでif文よりもcase文を使うようにしましょう。

unless文

if文では条件式を満たした時(true)に、処理を実行しましたが、unless文では条件を満たさなかった時(false)に処理を実行する構文になります。

構文は以下のようになります。

unless 条件式 then
    条件式を満たさなかった時(false)に行う処理
end

また、if文の時と同様に「else」を使うことができます。こちらは、if文とは逆に、条件式を満たした時に処理が実行されます。

unless文は条件式に否定演算子「!」をつけることで、if文で書き換えることができます。

unless文で書いた方が意味が理解しやすい場合があるので、そういった場合に使います。

例えば、会員ステータスが「無料会員」以外の場合に処理を行う場合、unless文を使うと以下のようにかけます。

status = "有料会員"
unless status == "無料会員" then
    puts("無料会員ではありません")
end

基本的にはif文が分かれば大丈夫ですが、こういった書き方もあるということを覚えておきましょう。

まとめ

この記事では、Rubyでの条件分岐の使い方について解説しました。

条件分岐はプログラミングの基本なので、しっかりと理解しましょう。

以下の講座で体系的に学ぶのもオススメです。

はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です