1

次のコードがあります

public class direction do(direction)
    if(istrue) {
        left = do(left);
    } else {
        right = do(right);
    }
}

とにかくこれを短縮する方法があるかどうか疑問に思っていました。三項演算子を使ってみましたが、ちょっと難しかったです。提案?

4

3 に答える 3

4

あなたの例では、三項演算子の賢明な使用法はありません。

Java (およびその他の C に似た言語) における三項演算子の値は、三項演算子の式がであるのに対し、if ステートメントはステートメントであるということです。式は値を生成しますが、ステートメントは生成しません。三項演算子expressionの結果の値を使用していない場合は、三項演算子を使用する必要はありません。やらないでください。

参考までに、三項演算子の有効な使用例を次に示します。

int max(int x, int y) {
    return x > y? x : y;
}
于 2011-03-04T05:07:05.240 に答える
2

チームの他のプログラマーが気にしない場合は、3項式を使用できます。したがって、例が有効なJavaである場合:

public void Do(Direction direction)
{
    (istrue)? left = Do(left) : right = Do(right);
}

中括弧は省略できますif

public void Do(Direction direction)
{
    if ( istrue )
        left = Do(left);
    else
        right = Do(right);
}

または、1つのライナーを持つこともできます:

public void Do(Direction d)    { (istrue)? left = Do(left) : right = Do(right); }

何よりも、明確であまり賢くないスタイルを選択してください。コードが読みやすく、理解しやすい場合は、より多くの行を使用してください。

ワンライナーは一般的にあまり読みにくいですが、場合によっては(私にとって)意味があります。特に、非常によく似た小さな方法のファミリーがある場合はそうです。

public String getFirstName()        { return first_name; }
public String getLastName()         { return last_name; }
public String getAddress1()         { return address1; }
public String getAddress2()         { return address2; }
public String getCity()             { return city; }
public String getState()            { return state; }
public String getZip()              { return zip; }
于 2011-03-04T04:50:27.140 に答える
0

コードでは、条件に応じて 2 つの異なる変数 (leftまたはright) に代入する必要があります。三項式は、代入の左辺では使用できないため、これには役立ちません。

これにより、(2 つの) 割り当ての RHS が残ります。理論的には三項式を使用できますが、おそらくコードが長くなります。

したがって、簡単な答えは、三項演算子は役に立たないということです。

于 2011-03-04T05:49:01.553 に答える