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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

673閲覧

文字列の一部を例外として投げるのはまずいでしょうか?

_beg

総合スコア19

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/21 08:32

いくつかのファイルを読み込む関数を作成しました。
それぞれにエラー処理とreturnを書くのは煩雑かなと感じたため、ファイル名のみをstd::runtime_errorで投げ、関数内でcatchし、エラー処理、returnする処理を書きました。

この方法はまずいでしょうか?また、より上手に処理する方法があれば教えていただきたいです。

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

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

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

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

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

fana

2021/06/21 08:41

> この方法はまずいでしょうか? 何か懸念事項があるのであれば,具体的に示していただきたく.
_beg

2021/06/21 08:43

例外のメッセージに文章となっていない単語を入れているためです。
fana

2021/06/21 08:53

関数内でcatchしているなら,その例外が外に漏れだすこともないのでしょうし, 例外のwhat()をエラー処理に特段使わないならば,結局だれもwhat()を使わないわけですから,問題は無いように思いますが.
BeatStar

2021/06/21 08:56 編集

戻り値として例外を投げる……っていう意味でなら『ダメ』です。 (趣味で自分だけが使うならその人の勝手ですが、『ダメな設計』ですね) ただし、例外的例外でなら問題ありません。 まあ、『仕様に因る』としか言えませんね。
_beg

2021/06/21 08:56

意図しないruntime_errが発生した場合変なメッセージを作ってしまいそうだな…と考えていました。ありがとうございます。
fana

2021/06/21 09:02

> 意図しないruntime_errが発生した場合変なメッセージを作ってしまいそう ああ,そういう… であれば,自身が投げる例外については runtime_err ではない型にすれば分離できるのではないでしょうか.
_beg

2021/06/21 09:05

> BeatStarさん だめな設計なのですね。 例外的例外とはどういったものを指していますか?
_beg

2021/06/21 09:08

> fanaさん その方向で考えてみます。ありがとうございます。
BeatStar

2021/06/21 09:25

単純に、文字通り、『例外的なもの』です。 『ファイルが存在しないため、読み込めない』、『メモリが足りない』、 『Javaでいうヌルポ』……という感じのです。
_beg

2021/06/21 09:27

> BeatStarさん 理解しました。ありがとうございました。
fana

2021/06/21 09:32

(質問タイトル見たとき,文字列(string型とか)をthrowする話かと思った.)
guest

回答1

0

ベストアンサー

意図しないruntime_errが発生した場合変なメッセージを作ってしまいそうだな…と考えていました。

(質問への追記・修正の依頼 より引用)

そういうことがあるとしたら,メッセージが変になることよりも,
意図しないものをcatchしてしまうことに問題が出そうな気もします.

これについては,
その処理の中だけで使う例外型を一個作って,自身のcatchではその型をcatchする記述にすれば回避できるのではないでしょうか.


しかし,どこなに提示なり出力なりするためのメッセージの内容の良さについて考えるのであれば,
例外を投げたところが最も妥当な(具体的な)メッセージを作れるハズですし,

ファイル名のみ

とせずに,エラーメッセージそのものを例外に持たせる形の方が良いように思えます.
(各所で1回書くだけですし,横着せずとも良いのではないかと.)


投稿2021/06/21 09:11

編集2021/06/21 09:11
fana

総合スコア11996

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

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

_beg

2021/06/21 09:13

エラーメッセージをちゃんと書くことにします。ご回答ありがとうございます。
fana

2021/06/21 09:16

「ファイルXXXの読込中にエラーが発生しました」だけだと,問題に遭遇した側は途方にくれるかもしれませんから, ファイルが開けなかった とか ○○という項目がなかった とか この値が異常だとか そういう情報があった方が良いですよね,きっと.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問