質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

1175閲覧

例外以外のエラーハンドリング方法はありますか?

t-miyazaki

総合スコア71

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

1クリップ

投稿2015/10/08 02:44

最近はほとんどの言語でtry-catch文やそれに類する例外処理機構が実装されていますが、このような例外は劣化したgotoに他ならないという批判的な意見も聞きます。
では、このような例外処理ではない、他のエラーハンドリング方法というのはあるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

いまモダンとされているエラー表現手法は、Either型やOption(OptionalとかMaybeとかとも)型を使った返し方ですね。
Swift, Scalaのような最近の言語はこれらを基本にしていますし、JavaもJava8からOptionalを標準クラスライブラリに取り込み始めました。

Either型は、成功した場合は戻り値を、失敗した場合は失敗原因を表現するオブジェクトを保持しているようなクラスです。そして、Either型データを扱うときには、もちろん「成功か失敗か」を判定するコードを自力で書いてもいいのですがもっとスマートな方法が提供されています。「成功した場合はその戻り値でこれをしろ」「失敗した場合はその原因によってこれをしろ」という処理を書いたラムダ式を渡せるのです。

Option型は、失敗しても失敗原因は持っていないEither型だと思ってください。成功した場合のラムダ式だけ受け取れます。

投稿2015/10/08 03:19

編集2015/10/08 03:38
yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-miyazaki

2015/10/08 07:16

ありがとうございました。Javaでもラムダ式を駆使して使う構文が用意されていましたね。
guest

0

現実問題として、例外以外の手法で異常な状態を扱うには、

  • C言語のerrnoのような、何かしらのオブジェクトにエラー状態を持たせて、それをチェックする
  • 返り値としてエラー情報を流す

などのようなものが考えられます。

ただし、言語側で例外機構に従って標準ライブラリや処理系が構築されている場合や、使うライブラリが例外を投げてくるような場合、例外を処理しなければ強制終了が待っていますので、選択肢はありません。

投稿2015/10/08 02:56

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-miyazaki

2015/10/08 07:16

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問