0

これは簡単ですが重要な質問だと思います。

私は関数を持つクラスを書いています:

public MyClass myFunction(MyClass mc) { ... }

この関数では、mc の状態を変更して元に戻します。MCは場違いなので必要ないのは承知しております。MyClass を返したい理由は、null を使用して更新の失敗を示すためです。

戻り値の型をブール値に変更し、false を使用してエラーを示すことができます。

public boolean myFunction(MyClass mc) { ... }

しかし、かなり前に、これは良い習慣ではないという記事を読んだことを覚えています (詳細と理由は忘れましたが)。

エラーを表すために例外を使用することもできます。

public void myFunction(MyClass mc) throws MyException { ... }

しかし、これは重すぎると感じます。

私の個人的な意見では、エラーがシステム全体で意味のあるものである場合は、例外を使用する必要があります。エラーが呼び出し元と関数にとってのみ意味がある場合は、例外を使用しないでください。しかし、この場合、エラーを示すために null または false を使用する必要がありますか?

ベストプラクティスは何だと思いますか? ご意見をお聞かせください。

どうもありがとう。

4

4 に答える 4

5

失敗は更新プロセスの予期された部分ですか? それとも、すべてが悲惨な方向に進んだときにのみ起こるものですか?

本当に例外的な条件である場合は、例外を使用することをお勧めします。この種の戻り値は無視される傾向があります( のFileようなひどいブール値を返す関数のいくつかを見てくださいmkdirs

失敗が更新の試行の一部であると予想される場合は、ブール値または何らかのステータス オブジェクトを返す必要があります。

于 2012-04-22T17:52:02.937 に答える
0

一般的に嫌われているのは、例外をスローする代わりに何らかのリターン コード (int など) を使用することです。失敗した更新が「通常の」動作である場合、ブール値を返すことは問題ありません。たとえば、 Collection.add はこれを行います。

于 2012-04-22T17:58:45.087 に答える
0

あなたがリストした3つのオプションのうち、最初のものは使用しません。

public MyClass myFunction(MyClass mc) { ... }

この場合、myFunctions はそのパラメーター (mc) を返すか、null を返します。使用できるオプションは 2 つだけなので、基本的には

public boolean myFunction(MyClass mc) { ... }

Steven Schlansker が言ったように、失敗した更新が本当に例外的な状態なのか、ユーザーが処理する必要があると予想されるものなのかを判断する必要があります。

注意すべきもう 1 つの点: ブール値を返す (例外をスローしない) メソッドとして実装することにした場合は、 MyClass mcオブジェクトに変更がないか、すべての変更が行われたことを確認することをお勧めします。

たとえば、myFunction が MyClass の 3 つのフィールド ( x,y,z ) を更新するとします。myFunction(mc)を呼び出し、そのうちの 2 つ ( x,y ) を更新でき、3 番目 ( z ) の更新に失敗した場合、 falseが返されます。x と zは更新されましたが、zは更新されなかったため、 MyClass mcオブジェクトは一貫性のない状態になります。ユーザーが既存のmcオブジェクトを使用し続けることを決定した場合、これによりさらに問題が発生する可能性があります。myMethodを例外処理メソッドとして実装することにした場合、オブジェクトが無効な状態になる可能性があることが理解しやすくなります。

于 2012-04-22T19:31:58.660 に答える
0

呼び出し元の関数に依存します。

呼び出し元関数がそのオブジェクトの値を必要とする場合

             then you should return Null in case of failure 
             and return the OBJECT in case  of success

呼び出し元関数が、オブジェクトが更新されているかどうかに関係なく、オブジェクトのステータスのみを必要とする場合

             then return true in case of success 
             and return false in case of failure
于 2015-10-22T06:12:41.737 に答える