「if」ステートメントまたは「try / catch」ブロックの徹底的な使用?

StackOverflow https://stackoverflow.com/questions/328976

質問

より良いコーディングの実践/より効率的なコードの作成/見栄えの良さ/その他についての考えを教えてください:ifステートメントを使用して潜在的な問題を予測してキャッチする能力を向上および改善しますか?または、一般的にtry / catchをうまく利用しますか?

これがJava向けだとしましょう(重要な場合)。

編集:現在、明らかに時代遅れで制約のあるいくつかの現在のコーディング慣行から自分自身を移行していますが、いくつかの点でそうする必要性に少し引き裂かれていますこれとして)。私は単にこれに関するいくつかの視点を求めています。議論ではありません。

役に立ちましたか?

他のヒント

if ブロックはわずかに高速です。十数個必要ない場合は、 try / catches よりも良いアイデアです。コードが実行されるたびに例外が発生することはありません。サーバーの切断などのまれなイベントには例外を使用しますが(毎日数回発生します)、制御可能な変数の場合は if ブロックします。

記述しているコードに関係なく、両方を使用することになります。 Javaランタイムについて話すことはできませんが、.NETランタイムでは、try-catchブロックの使用に関連するパフォーマンスヒットがあります。結果として、キャッチされた例外を処理する明確な方法がある領域でのみ使用するようにします(問題の存在を記録するだけであっても)。

コード内でtry-catchブロックまたはif-elseブロックの多くを使用している場合、またはメソッドがかなり長い傾向がある場合は、コードを多数の小さなメソッドにリファクタリングすることを検討してください。ロジックの意図は、従うのが簡単になるだけでなく、単体テストも簡単になります。

ステートメントの方が良いと思います。コードのすべての行をtry..catchで囲むことはできません(できますが、できません)。すべての行ではなく、try catchでコードのブロックを囲むことができます。

そして例外は物事を遅くします。

私の2p:try / catchを使用するのが最適です:

  • これにより、例外処理を行っていることを他のコーダーに完全に明らかにします
  • コンパイラはあなたが何をしているかを理解し、より適切なコンパイル時チェックを実行できます

私の経験では、if-conditional-logicを使用すると、エラー処理とビジネスロジックを区別することが難しくなります。

経験豊富な開発者やアナリストから言われたことから、try / catchはオブジェクト指向であり、if手続きはより手続き的です。

個人的には気にしません。

try / catchのほうが遅く、パフォーマンスに影響を与えるという事実を知っていますが、やりたいことを行う前に検証に12個のifを使用する場合は、常に使用しますコードの行数を節約するためのtry / catch。

これにより、何も検証する必要がなくなり、人生が非常に簡単になります。ステートメントが失敗した場合は、「else」ブロックで...「catch」ブロックで行ったことを実行します。

ときどき、いくつかのifステートメントをtry / catchで囲むことがありますが、とにかく。

必要なことを行う前に、検証する対象が少数(1または2)しかない場合にifを使用します。

ここで言及されていないことが1つあります。

if-elseステートメントを使用すると、コードが実行されるたびに、少なくとも1つの条件が評価されて実行されることが保証されます。 if-else-elseifの仕組みを知っているはずですが、明確にするために、ステートメントの if 部分は常に評価されます。falseの場合、次の else-if が評価され、 else のみが評価されるまで続きます。

したがって、if-elseステートメントを使用すると、パフォーマンスに影響します。 (ほとんどの場合)それほど重要ではありませんが、評価の実行にはCPU時間を要します。

try-catchステートメント、および私が間違っている場合は修正しますが、実行時に必要になるまで考慮されません(つまり、例外がスローされます)。したがって、コードをtry-catchでラップするだけでは、実際に例外がキャッチされるまでパフォーマンスに影響しません。

また、パフォーマンスに影響を与えるのはキャッチではなく、スローです。

重要なポイントの1つは、条件付きロジックにtry-catchステートメントを使用しないでください。これらは、例外処理のために設計された目的にのみ使用する必要があります!

例外をキャッチすることは、例外の処理方法がわかっている場合に不可欠です。例外を適切に処理する方法がない場合は、それを手放す必要があります。チェーンのさらに上のコードでは、例外を処理するより良い方法があるかもしれません。

通常、例外がユーザーに表示される前にキャッチするために、アプリケーションの最上位レベルに例外ハンドラを用意することをお勧めします。 ASP.NETでは、global.asaxのApplication_Errorイベントでこれを行うことができます。他の言語/環境では、メインループでそれを行います。それが何であれ。

ただし、キャッチされないままの場合が常にあるいくつかの例外があります。例外が発生した場合、アプリケーションの状態がひどく侵害されており、信頼できないことを示す指標となる場合があります。唯一安全なことは、強制終了して再起動することです。

@PersonalPerson-申し訳ありませんが、これは単なる遅延コーディングです。 ifステートメントが多すぎるためにtry-catchを使用するのではなく、コードをリファクタリングしてください(つまり、独自のメソッドに検証ロジックを配置してください)。これにより、コードがよりクリーンで読みやすくなり、パフォーマンスのベストプラクティスが維持されます。

最小限の行数を達成するためにコードを記述しようとしないでください。これは常にひどくなります。確かに、あなたのコーダー仲間がうんざりするような何かを書くためのよりエレガントな方法を見つけることができますが、それは物事を読みにくくします。

誓います、以前あなたのコードを扱ったことがあるので、頭が痛いです。

例外の使用は、コードの別の部分に疎結合の方法で何か問題が発生したことを通知する汎用的な方法です。 if .. nad else ..を使用して例外条件を処理する場合は、コードの別の部分に、すぐにスパゲッティコードになる可能性が高い任意の変数やその他のものを挿入する必要があることを想像してください。

次に、あなたが外部ライブラリ/パッケージを使用しており、作成者が自分のコードに他の任意の方法で間違った状態を処理することを決めたと想像してみましょう-それに対処する方法を強制します-例えば特定のメソッドがtrueまたはfalseなどを返すかどうかを確認する必要があります。

例外を使用すると、エラーの処理がはるかに簡単になります-何か問題が発生した場合は、他のコードが例外をスローするので、コードをtryブロックにラップして、考えられる例外を独自の方法で処理します。

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