for 循环中 if 内部返回和中断之间的区别



我正在研究一个代码,其中有以下代码:

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);
}

我只想知道此代码中的returnbreak语句是否以任何方式彼此不同。因为我在此代码之外测试了一个类似的示例,并且returnbreak都停止了循环并终止了函数。

break只停止循环; return停止整个方法。

像这样的breakreturn并置使得很难遵循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;
}

我想说这更容易理解(虽然稍微冗长一些),因为它将正在做的不同事情分开:你试图找到一个匹配的股票代码;如果你发现了这一点,那就做其他事情。将它们混合到一个循环中会混淆该意图。

最新更新