プログラミングは仕事に関するものです
これに答える最も簡単な方法は、OOPが長年にわたって行ってきた進歩を理解することだと思います。OOPで行われたすべて(および、ほとんどのプログラミングパラダイム)は、必要な作業を中心にモデル化されます。
メソッドが呼び出されるたびに、呼び出し元は「この作業を行う方法がわかりませんが、方法は知っているので、私のためにそれを行います」と言っています。
これは難しさを示しました:呼び出されたメソッドが作業を行う方法を一般的に知っているとどうなりますか?「あなたを助けたいと思っていましたが、本当にやりましたが、それはできません」と伝える方法が必要でした。
これを伝える初期の方法論は、単に「ゴミ」値を返すことでした。たぶん、あなたは正の整数を期待しているので、呼び出されたメソッドは負の数を返します。これを実現する別の方法は、エラー値をどこかに設定することでした。残念ながら、どちらの方法でも、定型文のlet-me-check-over-here-to-make-sure-sure-everything's-kosherコードになりました。事態が複雑になるにつれて、このシステムは崩壊します。
例外的なアナロジー
大工、配管工、電気技師がいるとしましょう。あなたはあなたの流しを修理するために配管工したいので、彼はそれを見てみましょう。「申し訳ありませんが、修正できません。壊れています。」と彼が言っただけではあまり役に立ちません。地獄、彼がそれを修正することができなかったと言って手紙を見て、去って、そしてあなたに送るならば、それはさらに悪いです。今、あなたは彼があなたの望んだことをしなかったことを知る前にあなたのメールをチェックしなければなりません。
あなたが好むのは、「あなたのポンプが機能していないように見えるので、私はそれを修正できませんでした」と彼に言わせることです。
この情報を使用して、電気技師に問題を見てもらいたいと結論付けることができます。おそらく、電気技師は大工に関連する何かを見つけるでしょう、そしてあなたは大工にそれを修理してもらう必要があります。
ヘック、あなたも、あなたは知らないかもしれない、あなたは電気技師を必要と知っていない可能性があります誰があなたが必要です。あなたは家の修理ビジネスのちょうど中間管理者であり、あなたの焦点は配管工事です。あなたはあなたが問題について上司だと言い、それから彼は電気技師にそれを修正するように言います。
これがモデリングの例外です:切り離された方法での複雑な故障モード。配管工は電気技師について知る必要はありません。チェーンの上の誰かが問題を解決できることを知る必要さえありません。彼は、発生した問題について報告するだけです。
だから...アンチパターン?
それでは、例外のポイントを理解することが最初のステップです。次に、アンチパターンとは何かを理解することです。
アンチパターンとしての資格を得るには、次のことが必要です。
最初のポイントは簡単に満たされます-システムは動作しましたよね?
2番目のポイントはより粘着性です。通常の制御フローとして例外を使用する主な理由は、それが目的ではないためです。プログラム内の特定の機能には比較的明確な目的が必要であり、その目的を採用すると不必要な混乱が生じます。
しかし、それは決定的な害ではありません。それは物事を行うには貧弱な方法であり、奇妙ですが、アンチパターンですか?いいえ。ただ...奇妙です。