【问题标题】:How can I shorten this code using ternary operators?如何使用三元运算符缩短此代码?
【发布时间】:2011-07-08 13:19:14
【问题描述】:

我有以下代码

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

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

【问题讨论】:

  • 还不够短吗?此外,这看起来不像是有效的 Java 代码。
  • 方法行缺少括号。这应该是一个 do while 循环吗?
  • 你能用do作为函数名吗? directionleftright 定义在哪里?为什么不直接发布整个示例而不是尝试“简化”它。
  • 我不确定您的代码是哪种语言。但这应该有效 - istrue ? (left = do(left)) : ((right = do(right)) ;。但是您的代码形式非常易读。为什么要为此使用三元运算符?
  • 如果你的 if/else 条件都设置了相同的变量,你应该使用三元运算符。由于您在此处设置不同的变量,因此不建议使用三元。

标签: java recursion ternary-operator ternary


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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; }
    

    【讨论】:

      【解决方案3】:

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

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

      所以简短的回答是三元运算符无济于事。

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 2021-11-16
        • 1970-01-01
        • 2013-11-14
        • 2015-09-13
        • 2020-12-18
        • 2023-04-10
        • 2018-06-27
        • 2019-08-20
        相关资源
        最近更新 更多