概要
プログラムを作成する時、私たちが予想できないエラーが発生する時もあります。このようにエラーが発生したら、プログラムは意図せず終了されます。例外処理はこのように私たちが予想できないエラーが発生する時、プログラムが終了されないようにしてくれます。
このブログポストではRubyで例外処理をする方法について説明します。
例外処理
普通の他の言語ではtry-catch
文を使って例外処理をします。しかし、Rubyでは例外処理をするためにはbegin-rescue-end
文を使います。
begin
# 例外が発生する可能性がある部分
rescue
# 例外処理
else
# 例外が発生しない場合の処理
ensure
# 最後に実行される処理
end
上のようにbegin
とrescue
の間には私たちが予想できないエラーが発生する可能性がある部分を作成します。ここで例外が発生する場合、rescue
とelse
の間が実行されます。最後にはensure
とend
の間が実行されます。
もし、begin
とrescue
の間でエラーが発生しない場合、else
とensure
の間が実行されってensure
とend
の間の部分が実行されます。
デバッグ変数
Rubyではエラーが発生して例外処理の部分が実行されると、次のような変数が自動的に割り当てられます。
$!₩
: 最後に起きた例外と関連する情報$@
: 最後に起きた例外の位置と関連する情報
例題
次のように例外処理を使うことができます。
puts "[Search a file with file name]"
begin
print "file name: "
file_name = gets.chop
puts File.ftype(file_name)
rescue
puts "Error!!"
puts "#{$@}"
puts "#{$!}"
end
上の例題を少し詳しく見てみます。
file_name = gets.chop
検索したいファイルの名前をgets
メソッドを使ってユーザーから入力してもらいます。入力した文字列をchop
を使って改行文字(\n
)を消します。
puts File.ftype(file_name)
ユーザーから入力してもらったファイルの名前をFile
のftype
メソッドを使ってファイルタイプを取ってきます。
[Search a file with file name]
file name: example.txt
file
実際、存在するファイルを入力したら上のようにファイルの種類を返します。しかし、存在してないファイルの名前を入力するとエラーが発生します。
rescue
puts "Error!!"
puts "#{$@}"
puts "#{$!}"
end
エラーが発生したら、rescue
とend
の間が実行されて画面にはError!!
と言う文字が表示されて、発生した位置に関する情報($@
)とエラーに関する情報($!
)が表示されます。
Error!!
No such file or directory @ rb_file_s_ftype - test
["./index.rb:5:in `ftype'", "./index.rb:5:in `<main>'"]
完了
これでRubyで例外処理をする方法について調べて見ました。今からはbegin-rescue
を使ってプログラムが急に終了されることを防止して見てください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。