2017-08-24 8 views
0

私の質問はかなり簡単です。 私はTriangleと呼ばれるクラスを持っています。このクラスにはメソッドがあります。例外をスローするか値を返す

public boolean isAnyAngleGreaterThan(double deg); 

私の質問は以下の通りです: '度' は範囲内にない場合

iは、IllegalArgumentExceptionをスローする必要があります0 < '度' < 180または度が< = 0である場合、私は単にTRUEを返す必要がありますdeg>が180以上の場合はFALSEを返します。

またはどちらが最も適していますか? 'ADEG'

public boolean isAnyAngleGreaterThan(double deg) { 
    if (Double.compare(0, deg) >= 0) { 
     throw new IllegalArgumentException("Angle (deg) can't be negative."); 
    } else if (Double.compare(180, deg) <= 0) { 
     throw new IllegalArgumentException("Angle (deg) can't be greater or equal than 180."); 
    } 

    return Double.compare(aDeg, deg) > 0 
      || Double.compare(bDeg, deg) > 0 
      || Double.compare(cDeg, deg) > 0; 
} 

public boolean isAnyAngleGreaterThan(double deg) { 
    return Double.compare(aDeg, deg) > 0 
      || Double.compare(bDeg, deg) > 0 
      || Double.compare(cDeg, deg) > 0; 
} 

、 'bDeg' と 'cDeg' は、Bと三角形におけるc角度です。

+0

フローを継続したい場合はブール値を返すことができます。それ以外の場合はスローすることができます。 –

+0

例外を投げたり処理したりするのは非常に忙しい作業です。通常、例外は開発者によって投げられ、開発者によって処理され、より高いレベルで使用されます。したがって、例外をスローする特別な必要がない場合は、例外をスローしないでください。要求されない限り、例外をスローしないでください。 –

答えて

1

私はオブジェクトの名前から推測すると、このオブジェクトは三角形を表すことを意図しています。そのようなものは通常、通常はシステムの状態を含むmodelと呼ばれるコードの領域に常駐します。

したがって、ほとんど決しては有効性チェックを実行します。パラメータ検証は、できるだけ浅いレベルで、すなわち値ができるだけ入力/読み取りされる場所の近くで実行される必要があります。これはFail Fastのパラダイムです。

これは中心的なオブジェクトです。それは、結果へのアクセスのセキュリティやそれが返す結果の暗号化の責任を担うべきである以上に、パラメータのチェックを行うべきではありません。

モデルコードでパラメータを検証する必要があるのは、一部のパラメータで他の問題が発生する可能性がある場合だけです。あなたが比較しているすべてのものが他のdoubleの値である場合、あなたのケースでは問題はありません。

たとえば、除算(ゼロ除算など)やその他の悪影響が発生する可能性のある計算を行う場合は、Fail Fastに正しくなり、0の値をチェックし、例外をスローします。

+0

モデルエリアに属するのはどういう意味ですか?これは単なるTriangleクラスのメソッドですか? – Lurr

+0

@Lurr - そうだけど、三角形をする**ものをするか、それともちょうど*ものなの?あなたは彼らが純粋なものだと思うので、モデルの一部とみなされます。 – OldCurmudgeon

+0

ええ、それは正しいです、彼らはただのものです、彼らは何もしません。私はモデルがMVCを話すときにデータへのアクセスを処理すると思った。それは間違いなくビューに属していません、どちらのコントローラも、私は完全に販売されていないので、それはどちらかのモデルに属している必要がありますか?それはそれがどこに属していないように感じる? – Lurr

0

一般的な規則は次のとおりです。フロー制御として例外を使用しないでください。したがって

  • そのメソッドの結果が他の後から、あなたはbooleanを返す必要が例外をtrowing何かにつながる場合。

  • このメソッドの結果を使用して例外をスローする必要があるかどうかを調べる場合、メソッドは例外自体をスローすることがあります(void)。

0

個人的に、関数は基本的なチェックを意味します。三角形はパラメーターより大きな角度を持ちますか?これは、角度に対する制限があるので、true/falseという値を返すだけであるということは述べていません。ただし、この関数がユーザー定義のパラメーターで呼び出された場合、パラメーターが無効であることを示す例外を戻すことが容易になります。

これは実際にあなたのセマンティクス/あなたの個人的な好みの問題です。それは実際にあなたの関数が何をしたいかによって異なります。

0

あなたはそれが180

よりも大きい場合は、前者の理由は、ポリゴン内の角度は、数学的な意味で常にポジティブであるということです度が0以下の場合IllegalArgumentExceptionをスローし、falseを返すかもしれません。そして、後者の理由は多角形がおそらく三角形ではなく180以上の角度を持つ可能性があるが、一般的な数学的意味では180度より大きな角度を持つことが有効である。

関連する問題