5

ifJavaで次のステートメントを作成しました。

if(methodName.equals("set" + this.name) ||
    isBoolean() ? methodName.equals("is" + this.name) :
                  methodName.equals("get" + this.name)) {
    ...
}

if状態から状態を分離するために、このような式を に記述することは良い習慣ですか? そして、この式は簡略化できますか?

4

4 に答える 4

8

私はそれをに変更します

if (methodName.equals("set" + this.name)
 || methodName.equals( (isBoolean() ? "is" : "get") + this.name)) {
    ...
}
于 2010-05-12T23:32:29.993 に答える
2

次のようなものは機能しませんか?

if (methodName.equals("set" + this.name)
    || methodName.equals("get" + this.name)
    || (isBoolean() && methodName.equals("is" + this.name))) {
    ...
}

三項演算子を使用した方法よりも読みやすく、確かに理解しやすいです。また、メソッドへの不必要なメソッド呼び出しを回避できるという利点もありますisBoolean(1、2、または 4 つのメソッド呼び出しがありますが、あなたのメソッド呼び出しは常に 1 または 3 のいずれかです。パフォーマンスの増減は、おそらく気づくにはあまりにも些細なことです)。

また、 「これは三項演算子の合理的な使用ですか?」というタイトルの同様の質問もあります。あるユーザーは次のように言いました

三項演算子は値を返すためのものです。

IMO、状態を変更してはならず、戻り値を使用する必要があります。

それ以外の場合は、if ステートメントを使用します。if ステートメントは、コード ブロックを実行するためのものです。

読みやすくするために、'&&' を含む式を括弧で囲んでいることに注意してください。x && yは の前に評価されるため、それらは必要ありませんm || n

使用するかどうかはあなた次第ですが、私は読みやすさを優先して使用を避ける傾向があります。

于 2010-05-13T00:07:01.117 に答える
2

それは良い習慣ですか?読みやすくなれば良い。(1) 読みやすく、(2) 混乱するような人が読まない場合は、読みやすくなります。誰がそれを読むつもりですか?

于 2010-05-12T23:36:34.430 に答える
2

私はそれを変更する傾向があります

if (methodName.equals(setterForThis())
   || methodName.equals(getterForThis())) {
    ...
}

いくつかの関数を抽出すると:

private String setterForThis() {
   return "set" + this.name;
}

private String getterForThis() {
   return (isBoolean() ? "is" : "get") + this.name;
}

もちろんもっと長いですが、とにかく私はゴルフにはあまり興味がありません.

于 2010-05-13T00:53:27.737 に答える