質問

例外をスローするコードを書く際に、こちら、メッセージの最後に来て、句読点で一時停止しました。私がスローした例外メッセージのほぼすべてに、おそらく!どこかに。

throw new InvalidOperationException("I'm not configured correctly!");
throw new ArgumentNullException("You passed a null!");
throw new StupidUserException("You can't divide by 0!  What the hell were you THINKING???  DUMMY!!!!!");

例外メッセージを書くとき、どのようなトーンを取りますか?ログを調べてみると、特定のスタイルのメッセージが実際に他のメッセージよりも役立つと思いますか?

役に立ちましたか?

解決

システムメッセージの会話のトーンは、ソフトウェアを専門的でずさんなように見せます。感嘆符、in辱、およびスラングは、洗練された例外メッセージに実際には場所がありません。

また、ランタイム例外は間違いを犯したプログラマーに対処するため、ランタイム例外とチェック例外にはJavaで異なるスタイルを使用する傾向があります。ランタイム例外はエンドユーザーに表示される可能性があるため、引き続き「きれいに保つ」ようにします。しかし、彼らはもう少し簡潔で不可解なことができます。チェックした例外メッセージは、説明するとユーザーが問題を修正できる可能性があるため、より役立つはずです(たとえば、ファイルが見つからない、ディスクがいっぱいで、ホストへのルートがないなど)。

情報の例外に関する特定のフィールドがない場合に役立つのは、問題のあるデータです:

throw new IndexOutOfBoundsException("offset < 0: " + off);

他のヒント

ただ事実の問題です。デバッグ時に必要になる可能性のあるすべての情報を含めますが、それ以上は含めないでください。

例外メッセージに感嘆符を含めるのは、本当に奇妙なことが起こったことを示す場合だけです。ほとんどのエラーは実際には奇妙ではありません、不正確な環境、ユーザーエラー、または単純なプログラミングミスの結果です。

私は、コーディング対象のフレームワークのトーン、文法、句読点のスタイルを反映しようとしています。これらのメッセージの1つが実際にいつクライアントまたはユーザーの前で出てくるかわからないので、トラブルシューティングに十分な専門的、非判断的かつ具体的なものをすべて保持します-セキュリティ問題を特定することなく、コード。

ユニットテストで(偶発的に)例外を除き、ペストのようなすべての文字列(UIおよび例外)で感嘆符を避けます。

責任は、それが本当にユーザーのせいであったとしても、私が見た中で最良の選択肢です。

「必要なファイルが見つかりません。正しいファイルがあるかどうかを確認しますか?」の行に沿ったものまたは&quot;問題が発生しました。 Dunnoなんだけど、修正できる唯一の方法は停止することです。再起動してください。&quot;

簡潔で詳細かつ冗長な情報(つまり、ArgumentNullExceptionは明らかにnullを含んでいた)。

しかし、これは私がしばらく読んだ中で最高のものです、最初の答えはこれ

感嘆符はあまり使いません。彼らは表現しすぎて、「ドライブにディスクがない!」という事実を考えてください。 「クレイジーユーザーのドライブにディスクがありません」と読むことができます。 ;)

国際化されたテキストを含む例外をスローするのが賢明だと思います。誰がコードを使用し、例外をキャッチし、ユーザーにテキストを表示するのか決してわかりません。 それは次のようになります:

throw new MagicalException(getText("magical.exception.text"));

スローするときに、基になる例外(ある場合)をラップすることもお勧めします。本当にデバッグに役立ちます。

ランタイムの例外がユーザーに表示されるとは思わないでください。ファイルアペンダーにログを記録している場合、好奇心user盛なユーザーがログを開いて dirty シークレットを覗くだけです。

次のような役立つメッセージが見つかりました:

  • 一貫性のあるフォーマットにより、彼らがあなたに言っていることを理解しやすくなります。
  • タイムスタンプ。プログラムのダイナミクスを感じることができます。
  • エラーの簡潔な要約。技術サポートを提供する場合は、すばやく識別できるようにエラーコードを追加してください。
  • 間違った原因の説明無効なユーザー入力コーディングエラー
  • を区別します。
  • コードの行またはを含む詳細情報。

そして最も重要なこと:

  • 問題の修正方法をユーザーに伝えます。

例:

Error 203 (Timeout) in commit.c line 42:
Unable to save salary data for user 'Linus' to database at '10.10.1.21'
after 1500ms.  Verify database address and login credentials.

学ぶのが最も難しい教訓の1つは、ユーザーがコードの内部構造に興味を持っているのは、仕事を終わらせることよりもはるかに少ないことです。できる限り簡単にできるようにすることです彼らの仕事、そしてあなたはあなたのソフトウェアに多大な価値を加えました。

私は、例外メッセージを例外自体に組み込む傾向があります。例えば。 file_not_foundは「ファイルが見つかりません」と言う必要があります。特定のデータは、ユーザーが理解できない場合にのみ含める必要があります。この場合、ユーザーはファイル名を知っているため、そのデータは追加しません。フォーマットは、必要に応じて情報を出力するものであれば何でも実行できるため、可能な限り再フォーマットしやすいようにしています。

丁寧で簡潔、シンプル、具体的。多くの場合、メッセージに状態値を含めると役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top