3 回答
TA贡献1856条经验 获得超11个赞
它不是||方式的“捷径”(或短路)运算符。和&&是(因为如果他们已经知道基于LHS的结果,他们将不会评估RHS),但是它将在工作方面满足您的要求。
作为区别的一个示例,如果text为null ,则此代码会很好:
boolean nullOrEmpty = text == null || text.equals("")
而这不会:
boolean nullOrEmpty = false;
nullOrEmpty |= text == null;
nullOrEmpty |= text.equals(""); // Throws exception if text is null
(显然,您可以"".equals(text)针对该特定情况进行处理-我只是在试图说明原理。)
TA贡献1848条经验 获得超10个赞
如果是关于可读性,我就有了将测试数据与测试逻辑分离的概念。代码示例:
// declare data
DataType [] dataToTest = new DataType[] {
defaultStock,
defaultWholesale,
defaultRetail,
defaultDelivery
}
// define logic
boolean checkIfAnyNegative(DataType [] data) {
boolean negativeValue = false;
int i = 0;
while (!negativeValue && i < data.length) {
negativeValue = data[i++] < 0;
}
return negativeValue;
}
该代码看起来更加冗长和不言自明。您甚至可以在方法调用中创建一个数组,如下所示:
checkIfAnyNegative(new DataType[] {
defaultStock,
defaultWholesale,
defaultRetail,
defaultDelivery
});
它比“比较字符串”更具可读性,并且还具有短路的性能优势(以数组分配和方法调用为代价)。
编辑: 使用varargs参数可以简单地实现更高的可读性:
方法签名为:
boolean checkIfAnyNegative(DataType ... data)
呼叫看起来像这样:
checkIfAnyNegative( defaultStock, defaultWholesale, defaultRetail, defaultDelivery );
添加回答
举报