【Ruby入門】case文の基本とRubyらしい応用例の書き方
  • facebookページ
  • twitterページ
  • 2019.09.20

    【Ruby入門】case文の基本とRubyらしい応用例の書き方

    プログラミングを学ぶと、if文による条件分岐の他に、Rubyのcaseのような複数の条件を分岐する書き方も習います。しかし、Rubyのcaseは、数字や文字を比較して分岐させる機能との他に、配列が使えたり、範囲が使えたりと、他のプログラム言語よりも多機能です。こういった機能を知らずに使っている方が多いのではないでしょうか。そこで今回は、case文の基本とRubyらしい応用的な書き方について解説します。

    Rubyのcase文は他とは違う

    Rubyのcaseを、他のプログラム言語、例えばC言語のswitchと同じものと考えているのであれば、考えを改めてください。確かに同じような書き方もできますが、オブジェクト指向のプログラム言語のRubyでは、caseが扱う対象もオブジェクトです。そのため、他のプログラム言語にはできない処理も書けます。

    なお、そういった応用的な書き方の解説の前に、まずは、Rubyにおけるcase文の基本について解説します。

    複数の候補から処理を分岐させる書き方

    そもそもRubyではcase文、C言語などの他のプログラム言語ならswitch文は、複数の候補から処理を分岐させる処理を記述する構文です。同じ処理をif文でも書けますが、より見やすく簡潔に書くために、case文やswitch文が使われます。

    例えば、下の2つの例を比べてみてください。上は複数のifで書いた例、その下は同じ処理をcase文で書いています。この両者を比較すると、下の方が簡潔で見やすいと感じることでしょう。

    case文の基本

    Rubyのおけるcaseの基本的な書き方は次のとおりです。

    case 式
    when 式 [then]
    処理

    end

    まず、「case 式」から「end」までが、case文の範囲であり、その中に「when 式」やその条件に一致した場合の処理を記述します。「when 式」の後に、「then」を書いている例もありますが、省略しても構いません。また、どのwhenにも一致しない場合の処理を、「else」の次に書いてもいいし、省略しても構いません。

    また、caseの次に記述する式と、whenの次に記述する式との一致判定は、演算子===を用いて行います。なお、Rubyにおける===は、数値の一致判定の他に、範囲内にあるかの判定や、正規表現にマッチするかを判定する演算子です。そのため、単純な一致の他に、範囲を使って判定や、正規表現を使った判定による条件分岐にも使えます。

    さらに、サブクラスのインスタンス判定も行えるので、モジュールの所属関係をチェックする、といった処理も書けます。Rubyに詳しい方の中には、この機能を利用してRubyらしい書き方をされている方もいます。

    1つのwhenに複数条件を指定する

    先ほど紹介したように、Rubyのcase文における一致判定には===演算子が使われるので、数字や文字列の他にもいろいろなオブジェクトを使用できます。そのため、whenで配列を指定すれば、複数の数字や文字列との一致判定ができます。

    次から、配列を使ったcase文の使い方について解説します。

    whenに複数の条件を記述する方法

    C言語などでは、条件に一致した際に実行する処理の最後にbreak文を入れることで、そこで処理を終了できます。そして、これをうまく使うと、複数の条件に一致するケースを書くことが可能です。しかし、Rubyにはbreak文がありません。その代わり、whenに「式,式」といったように、「,」で区切って指定することで、複数の条件を記述できます。

    whenに複数の条件を記述する書き方
    case 式
    when 式1,式2
    処理

    end

    この書き方を使えば、例えば次のように、変数swの値が1と2だったら処理するcase文が書けます。

    配列を用いたwhenに複数の条件を記述する方法

    一つ前で説明した「式1,式2」の書き方は、whenに配列を指定したのと同じです。このようにwhenに配列の変数を指定しても構いません。ただし、配列変数を使用する場合は、変数名に「*」を付けます。

    whenの式で正規表現を使う

    先ほど解説したように、Rubyのcase文における一致判定には===演算子が使われており、whenの式に正規表現を指定することが可能です。次から、正規表現を使ったcase文の書き方と例について、ご紹介します。

    正規表現の指定方法

    Rubyのcaseで指定した変数のチェックに、続くwhenで正規表現を使って一致確認する場合、正規表現を「/」で囲って指定します。なお、Rubyにおける正規表現では、メタ文字と呼ばれる特別な働きをする文字を使い、一致する条件を記述します。

    例えば、半角数字の郵便番号をチェックする処理を組む際、数字7桁の場合と、数字3桁と数字4桁の間に「-」を入れた場合に、処理を切り替える場合、次のように記述します。

    なお、Rubyでは、whenの他にも正規表現を使うケースがたくさんあります。Webプログラマーを目指すならRubyのマニュアルなどで正規表現を学び、使いこなせるようになりましょう。

    正規表現 (Ruby 2.6.0)

    whenの式で範囲を使う

    先ほど、Rubyのcase文で配列を指定できると解説しましたが、同じように範囲を指定することも可能です。次から、whenの式に範囲を使ったcase文の使い方をご紹介します。

    whenの式に範囲を使う基本

    範囲を使ったcaseの書き方の基本は、whenで指定する式に「数字..数字」というrubyの範囲の書き方を使います。例えば、caseの式に数字を指定し、whenで指定した範囲に入っているかをチェックする場合の書き方は次のとおりです。

    case文で範囲を使う応用例

    先ほど、数字を使った範囲の書き方をご紹介しましたが、この機能は日付のチェックに応用できます。具体的には、caseの式に日付を指定し、whenで指定する式に「日付..日付」といった書き方で範囲を指定します。

    上記の例では、「require ‘date’」でdateクラスを使い、日付の文字列「”2019/7/21″」を、Date.parseでDateクラスに変換し、それを「..」で繋いで期間を指定しています。そのため、caseの式にDateクラスの変数を指定すれば、whenで範囲に入っているかのチェックができます。

    まとめ

    これまで紹介してきたように、Rubyのcaseは、他のプログラム言語のswitchと似ていますが、同じものではありません。正規表現や配列が扱えるなど、オブジェクト指向言語のRubyらしい使い方ができるメソッドの一つです。

    新しい機能をプログラムで実現する場合、そのプログラムの書き方は一つではありません。とはいっても、Rubyのプログラムで実現するのなら、Rubyらしい書き方を使えば、簡潔に読みやすいプログラムを作れます。そういったプログラムを書くために、splitメソッドをうまく活用してください。


    Ruby on Railsのフリーランスは高収入でおすすめ!

    Rubyができる方は多くはいないのが現状です。 プロジェクトは右肩上がりで増えているので、エンジニアが全く足りておりません。 Rubyの実務経験が1年以上ある方はフリーランスになることもできるので、ぜひご興味があればポテパンの無料カウンセリングをご利用下さいませ! Ruby案件に関する情報は下記にまとまっていますのでぜひご覧下さい。

    Ruby on Rails案件のイマがわかる!知って見つかる最適案件


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件