如何使用三元运算符缩短此代码?
问题描述:
我有下面这段代码如何使用三元运算符缩短此代码?
public class direction do(direction)
if(istrue) {
left = do(left);
} else {
right = do(right);
}
}
我想知道是否有无论如何缩短这个。我尝试使用三元运算符,但遇到了一些困难。建议?
答
如果团队中的其他程序员不介意,可以使用三元表达式。所以,如果你的例子是在有效的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; }
答
在您的例子,有三元操作员没有明智的用途。
在Java中(以及其他类似C语言)三元运算符的值是一个三元运算表达式是表达,而如果语句是一个语句。表达式产生的价值,但声明不。如果您没有使用三元运算符表达式产生的值,那么您没有使用三元运算符的业务。只是不要这样做。
为了您的利益,这里有一个有效的使用三元运算符的例子:
int max(int x, int y) {
return x > y? x : y;
}
答
您的代码需要分配给取决于条件两个不同的变量(left
或right
)。三元表达式不会帮助你做到这一点,因为它不能用在任务的左侧。
这留下了(两个)任务的RHS。尽管理论上可以使用三元表达式,但它可能会使代码更长。
所以简单的答案是三元运算符不会帮助。
它已经不够短了吗?此外,这看起来不像有效的Java代码。 – MAK 2011-03-04 04:12:51
缺少方法行中的括号。这是假设是一个while while循环吗? – Jim 2011-03-04 04:15:33
你甚至可以使用'do'作为函数名吗? “方向”,“左”和“右”定义在哪里?为什么不只是发布整个示例而不是试图“简化”它。 – mellamokb 2011-03-04 04:16:24