1

これは一種の幅広い質問ですが、とにかく聞きたかったのです。うまくいけば、私は多くの反対票を獲得しません:)

今日、私は面接に行ってきました。(いつものように) 数値の階乗を計算する関数を書くように言われました。その後、プログラムをクラッシュさせる原因について少し説明し、関数に負の値が渡されたときにユーザーに知らせる方法について話しました。

私は個人的に、アサーションを使用するか、ユーザーに知らせるために特別な番号を返すと言いましたが、彼がこれらの回答に非常に満足しているかどうかはわかりません.

関数に不正な値が渡されたことをユーザーに知らせるにはどうすればよいと思いますか?また、そのような状況で行う最善の方法は何ですか?

4

6 に答える 6

5

私はあなたの例外を聞いたことがありますか?

C++ のやり方は例外をスローすることです。これにより、何か問題が発生した場合、コードのユーザーに明示的に何かを実行させることができます。そうしないと、ユーザーのアプリケーションが終了します。

これは、エラー処理に関しても広く推奨されている1であり、例外を使用することによるパフォーマンスへの影響に関する議論は、コンピューターの処理能力が向上し、コンパイラがよりスマートになるにつれて薄れ始めています。

例外を使用するとコードの可読性が損なわれる、コードを理解するのも維持するのも難しくなる、と主張する人もいますが、それにはいくつかの真実があるかもしれません。

より高度な状況では、例外をスローしてクリーンアップするのは簡単な作業ではありませんが、数値の階乗のような「単純な」ものを計算する関数では、例外を使用するのは非常に簡単な作業です。


C++ 例外の最大の問題 (私の観点から) は、finally-clause がないことです。-clause を使用できる場合、例外がキャッチされた後にクリーンアップを担当するコードを書くことは、はるかに簡単になります。仕事。


推奨される読み取り:


脚注:
1.もちろん、主観的な意見です。


プロジェクト全体の一貫性..

コードの呼び出し元に何か問題が発生したことを知らせる良い方法を見つけた場合 ( return-value 、参照または例外によって設定されたエラー フラグ、またはほとんど..何でも) を使用していることを確認してください。プロジェクト全体で同じエラー通知システム。

エラー処理に関して一貫性のないライブラリを使用する場合ほど面倒なことはありません。

于 2012-07-17T20:10:50.490 に答える
2

関数のユーザーにそのエラーの処理を強制するため、私の最初の選択は例外です。特別な値を返した場合、ユーザーはそれを無視して特別なエラー値をそのまま使用する可能性があり、間違った結果になる可能性があります。

于 2012-07-17T20:16:27.360 に答える
2

入力を検証することは常に良い考えです。これは良いコーディング方法です。

ユーザーに知らせることは興味深い質問であり、実装に大きく依存します。GUI ベースのプログラムを作成している場合は、入力をルーチンに挿入する前にいつでも検証できます。入力が無効な場合は、いつでも画面にインジケーターを表示できます。

単に API を提供するだけの場合は、例外をスローするのがおそらく最善の方法であると私は主張します。私は関数 LIKE factorial の実装を見てきました。ここでは、答えが戻り値として返されます。別の入力パラメーターは、ユーザーが提供する unsigned int * などとして提供され、2 番目の戻り値をステータスとして提供できます。返される整数は、ある種のエラー コードを表します。

私は自分自身のプログラム全体をほとんど書いているので、入力を実際に処理するルーチンを配置する前にインターフェイスからの入力を事前に検証し、入力が無効な場合は GUI に出力を提供するのが大好きです。

于 2012-07-17T20:17:40.257 に答える
2

私は例外をスローします-おそらくChecked Exception(Javaで)です。

参照:例外の利点 - 利点 #2: コール スタックにエラーを伝播することは、「ユーザーに知らせる方法」を求められていることと一致します。ユーザーが呼び出しを開始したため、最終的には例外がずっと返されます。上。

より具体的には、Checked Exception: A quick search for some info: Checked vs Unchecked Exceptionを使用することをお勧めします。

チェックされた例外 : プログラムの直接の制御外の領域での無効な状態を表します (無効なユーザー入力、データベースの問題、ネットワークの停止、存在しないファイル)

通常、コードロジック/実装の失敗を表す Unchecked Exception とは対照的に

于 2012-07-17T20:17:59.180 に答える
1

それは、関数が何であるか、およびその使用方法によって異なります。必要に応じて、特別な戻り値を取得したり、例外をスローしたり、エラー フラグを設定したりできます。重要なことは、これに関して合理的なプロジェクト全体の哲学を持ち、それを一貫して使用することだと思います.

于 2012-07-17T20:13:39.977 に答える
1

エンドユーザーがアプリケーションに間違った入力をしたことを通知したい場合は、その旨を示すダイアログを表示する必要があります。

ただし、他の誰かがあなたのコードを実装していることについて話している場合は、refp の回答が最適です。

于 2012-07-17T20:14:56.480 に答える