我已经阅读了类似的问题,并了解到不可能使用三元运算而不是else
语句,它没有if-without else
语句。因为 if( calculation < 1 ){
calculation= 0;
}
语句是二进制而不是三元组。我的问题是更好的做法。
在我的代码中,有很多像这样的代码片段
calculation = calculation < 1 ? 0 : calculation;
我想用tenary缩短这些。使用以下内容更改这些语句是一种好的做法。
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// If the user wants to scroll, override the default event
if (event.getAction() == MotionEvent.ACTION_MOVE) {
return true; // So the system doesn't handle the event
}
return false;
}
});
答案 0 :(得分:2)
您可以创建一个可以创建流畅API的类(或多个类)。这样你的路线就是:
calculationTo = replace(calculationTo).with(0).when(calculationTo < 1)
在我看来,它并不比标准if语句读得好得多,但它也取决于你拥有的条件。
示例实施:
public class Replacer<T> {
private final T value;
private T replacementValue;
private Replacer(T value) {
this.value = value;
}
public static <V> Replacer<V> replace(V value) {
return new Replacer<V>(value);
}
public Replacer<T> with (T replacementValue) {
this.replacementValue = replacementValue;
return this;
}
public T when(boolean condition) {
if (condition) {
return replacementValue;
} else {
return value;
}
}
}
import static somepackage.Replacer.replace;
public class Main {
public static void main(String[] args) {
int calculationTo = 3;
calculationTo = replace(calculationTo).with(0).when(calculationTo < 1);
}
}
你可以扩展它或使条件成为一个函数,这样它就可以和lambda等一起使用。我也会让方法with
返回不同类的对象(例如ReplacerWithValue
),这样就可以调用{{ 1}}在一个链中两次会导致编译错误。
答案 1 :(得分:0)
既然您要求最佳实践,我会指出您可以做得更好的事情,然后我会告诉您为什么我喜欢这个三元运营商。
让我重新编写你的代码片段:
if (calculatedValueAfterStep1 < 1) {
calculatedValueAfterStep2 = 0;
} else {
calculatedValueAfterStep2 = calculatedValueAfterStep1;
}
当您阅读代码时,有人会问您&#34;&#39;计算&#39;代表&#34?;那么你不能在不询问行号的情况下回答这个问题。 &#34;计算&#34;的含义更改程序代码的过程。如果你无法解释一个变量意味着什么,你就不能给它一个好名字。这就是为什么我更喜欢我的版本。有一个明确的定义变量的含义&#34; calculatedValueAfterStep1&#34;和&#34; calculatedValueAfterStep2&#34;是。是的,名字很糟糕。相应地将它们更改为您的域。
现在,当您查看代码时,您会注意到&#34; calculatedValueAfterStep2&#34;没有宣布。所以让我们改变代码:
int calculatedValueAfterStep2 = -1;
if (calculatedValueAfterStep1 < 1) {
calculatedValueAfterStep2 = 0;
} else {
calculatedValueAfterStep2 = calculatedValueAfterStep1;
}
现在变得丑陋了。询问早期问题的同一个人现在会问&#34;为什么会计算出来的问题?用&#39; -1&#39;?&#34;初始化。所以这里有三元运算符:
int calculatedValueAfterStep2 = (calculatedValueAfterStep1 < 1) ? 0 : calculatedValueAfterStep2;
美了!