我正在研究一个代码,其中有以下代码:
public void add(StockUpdate newStockUpdate) {
for (StockUpdate stockUpdate : data) {
if (stockUpdate.getStockSymbol().equals(newStockUpdate.getStockSymbol())) {
if (stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
return;
}
break;
}
}
/* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
this.data.add(0, newStockUpdate);
notifyItemInserted(0);
}
我只想知道此代码中的return
和break
语句是否以任何方式彼此不同。因为我在此代码之外测试了一个类似的示例,并且return
和break
都停止了循环并终止了函数。
break
只停止循环; return
停止整个方法。
像这样的break
和return
并置使得很难遵循add
方法的逻辑。请考虑以下内容可能更容易遵循:
public void add(StockUpdate newStockUpdate) {
StockUpdate stockUpdate = findStockUpdateBySymbol(newStockUpdate.getStockSymbol());
if (stockUpdate != null
&& stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
return;
}
/* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
this.data.add(0, newStockUpdate);
notifyItemInserted(0);
}
// On non-android, it's easier to do this with a stream/findFirst.
private StockUpdate findStockUpdateBySymbol(StockSymbol sym) {
for (StockUpdate stockUpdate : data) {
if (stockUpdate.getStockSymbol().equals(sym)) {
return stockUpdate;
}
}
return null;
}
我想说这更容易理解(虽然稍微冗长一些),因为它将正在做的不同事情分开:你试图找到一个匹配的股票代码;如果你发现了这一点,那就做其他事情。将它们混合到一个循环中会混淆该意图。