Rubyにおける例外処理の基本、begin~rescue~endの使い方
  • facebookページ
  • twitterページ
  • 2020.12.25

    Rubyにおける例外処理の基本、begin~rescue~endの使い方

    Rubyでは、例外処理をbeginから始まるブロックに記述します。例外処理は、プログラムがエラーとなって途中で停止させず、利用者にエラー発生を伝えるメッセージを表示する機能などに使われ重要な機能です。今回は、このRubyにおける、beginで始まる例外処理の書き方について詳しく解説します。

    Rubyにおける例外処理

    Webシステムなど、人が操作するプログラムでは、想定外の操作によって誤動作するケースが必ずあります。そのような場合、プログラムを強制停止せず、正しい操作を案内したり、開発者への連絡を促さなければなりません。そのために使われるのが、例外処理です。もちろん、Rubyでも例外処理が組み込まれています。

    まずは、例外処理の基本と、Rubyにおける例外処理について紹介します。

    例外処理とは何か

    どんなに優れたシステムでも、そのプログラムが実行された際、開発者が意図した入力で動作するとは限りません。意図しない入力で、エラーが発生することはよくあります。しかし、そのエラーで、プログラムが強制的に停止したらどうなるでしょうか。

    そのプログラムが停止するばかりではなく、関連したサービスが使えなくなります。さらに、そのエラーの原因が解らなければ悪い評判が立ち、利用者離れを招いてしまいます。利用者に、正しい操作を示すか、開発者への連絡しもらい、修正しなければなりません。

    そのため、例外処理を使い、プログラムを強制停止せずに、エラーの原因を表示する処理を実装するのが一般的です。

    Rubyの例外処理

    JavaやC++などの他のプログラミング言語では、例外処理のためにtry~ctachが使われますが、rubyの例外処理は、begin~rescue~endです。

    そして、Rubyの例外処理の使い方は、beginの次に検査対象となるプログラムを記述し、rescueの次に先ほどのプログラムで例外処理が発生した場合の処理を記述します。

    また、Rubyで発生する例外には複数のエラータイプがあるので、どのエラータイプが発生したかによってrescueの処理を切り替えることも可能です。

    beginを省略した書き方も可能

    Rubyでは、クラスやモジュール、メソッド定義の中に限り、beginを省略し、rescueだけのブロックだけで例外処理を書くことも可能です。なお、このbeginを省略した書き方は、後で例を紹介しながら詳しく解説します。

    begin~rescue~endの文法

    例外処理が記述可能なプログラム言語は複数ありますが、その基本は、例外が発生する処理をブロックで囲い、それに続くブロックで例外が発生した場合の処理を記述します。そして、この書き方は、Rubyでも同じです。

    Rubyにおける例外処理の書き方の基本は次のとおりです。

    begin
    例外の発生をチェックする対象となるプログラム
    rescue
    例外が発生した場合の処理
    end

    また、エラータイプを指定して、複数の例外処理を記述することも可能です。

    begin
    例外の発生をチェックする対象となるプログラム
    rescue エラータイプ
    指定したエラータイプの例外が発生した場合の処理
    rescue エラータイプ
    指定したエラータイプの例外が発生した場合の処理
    end

    また、例外処理が発生しなかった場合の処理と、例外が発生してもしなくても実行する処理を、beginの下に書くこともできます。

    begin
    例外の発生をチェックする対象となるプログラム
    rescue
    例外が発生した場合の処理
    else
    例外が発生しない場合の処理
    ensure
    例外に関係なく実行する処理
    end

    開発者が意図しない操作によってエラーが発生した場合、例外処理が無ければ実行途中で強制停止してしまい、利用者には何が起きたか解りません。しかし、例外処理、および、例外に関係なく実行される処理を記述しておくことで、何が起きたか利用者に知らせ、また、その場合の手順などを表示することが可能です。

    Rubyの例外処理の例

    次に、Rubyの例外処理の例を紹介します。

    この例は、例外処理の有無に関係なく、実行直後に「開始」、終了時に「終了」を表示し、例外が発生したらエラーメッセージを、また、正常だったら入力された数字を使った計算式を表示します。

    beginで始まる例外処理を使わない、下記のプログラムでは、例外が発生した箇所でプログラムが停止してしまいます。

    この例では、numに数字が入力されなかったことで、100/0による例外(ZeroDivsionError)が発生し、そこでプログラムが強制停止されてしまいました。

    しかし、先ほどのbeginを使った例であれば、例外処理と例外に関係ない処理も実行するので、次のように表示されます。

    beginを省略した書き方

    これまで、beginから始まるRubyの例外処理について解説してきましたが、先ほど簡単に触れたように、条件次第ではbeginを省略した書き方が可能です。つまり、beginを書かずに、rescueから始まる例外処理と、ensureから始まる例外の有無に関係なく実行する処理のみでも記述できます。

    ただし、クラスやモジュール、メソッド定義の中など記述できる場所に制限があるので、注意してください。例えば、次のようなメソッドの中に記述した例外処理は、beginを省略した書き方が可能です。

    この場合、メソッドの中で例外が発生した場合、rescueおよびensureのブロック内に記述した内容を処理できます。

    まとめ

    これまで説明したように、Rubyには、begin~rescue~endのブロックを使った例外処理の記述が可能です。さらに、elseやensureを組み合わせることで、例外が発生しなかった場合の処理や、例外の有無に関係なく実行する処理なども書けます。また、クラスやモジュール、メソッドの中ではbeginの省略も可能です。ぜひ、beginを使った、Rubyの例外処理の書き方をマスターしてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

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

    関連ワード

    pickup









    ABOUT US

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

    READ MORE