如何使用三元运算符缩短此代码?

时间:2011-03-04 04:11:08

标签: java recursion ternary-operator ternary

我有以下代码

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

我想知道是否还有缩短这一点。我尝试使用三元运算符,但遇到了一些困难。建议?

3 个答案:

答案 0 :(得分:4)

在您的示例中,三元运算符没有明智的用途。

Java(和其他类C语言)中的三元运算符的值是三元运算符表达式是表达式,而if语句是语句 。表达式产生值,但语句不产生。如果您没有使用三元运算符表达式产生的值,那么您就没有使用三元运算符的业务。只是不要这样做。

为了您的兴趣,以下是有效使用三元运算符的示例:

int max(int x, int y) {
    return x > y? x : y;
}

答案 1 :(得分:2)

如果团队中的其他程序员不介意,您可以使用三元表达式。所以如果你的例子是有效的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);
}

或者你甚至可以有一个班轮:

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; }

答案 2 :(得分:0)

您的代码要求您根据条件分配两个不同的变量(leftright)。三元表达式无助于您这样做,因为它不能在赋值的左侧使用。

离开(两个)作业的RHS。虽然理论上你可以使用三元表达式,但它可能会使代码更长。

所以简短的回答是三元运算符无法帮助。