Java 编写干净的if else语句

Java 编写干净的if else语句

使用if else链有些时候看起来比较复杂,这可以通过将代码写成小块来避免。使用条件语句可以增加代码的可读性和更多。一个最好的做法是首先处理错误的情况。下面的例子显示了如何处理错误情况和简化if else逻辑。

例子1:

updateCache()–这是一个方法,在一些类级变量的基础上决定更新主数据库。

updateBackupDb()–这是一个更新数据库的方法。

使用这种类型的if else很难调试和扩展现有函数的任何功能。

优化前

// A simple method handling the data
// base operation related task
private void updateDb(boolean isForceUpdate) {
 
  // isUpdateReady is class level
  // variable
  if (isUpdateReady) {
 
    // isForceUpdate is argument variable
    // and based on this inner blocks is
    // executed
    if (isForceUpdate) {
 
      // isSynchCompleted is also class
      // level variable, based on its
      // true/false updateDbMain is called
      // here updateBackupDb is called
      // in both the cases
      if (isSynchCompleted) {
        updateDbMain(true);
        updateBackupDb(true);
 
      } else {
        updateDbMain(false);
        updateBackupDb(true);
      }
    } else {
 
      // execute this if isUpdateReady is
      // false i. e., this is dependent on
      // if condition
      updateCache(!isCacheEnabled);
 
      // end of second isForceUpdate block
    }
 
    // end of first if block
  }
 
  // end of method
}

观察:

在下面的代码中,布尔变量已经被确定,在此基础上 ,使用if和return语句将代码分成小块。

1.如果更新没有准备好,那么不需要进入方法 ,只需要从这个方法中退出。

2.同样,如果强制更新的布尔值是假的,那么在if语句中执行任务 - 更新缓存并从这个方法返回。

3.在最后一步,剩下的所有任务都完成了,更新备份数据库和更新主数据库。

优化后

// A simple method handling the
// data base operation related
// task
private void updateDb(boolean isForceUpdate) {
 
  // If isUpdateReaday boolean is not
  // true then return from this method,
  // nothing was done in else block
  if (!isUpdateReady)
    return;
 
  // Now if isForceUpdate boolean is
  // not true then only updating the
  // cache otherwise this block was
  // not called
  if (!isForceUpdate) {
    updateCache(!isCacheEnabled);
    return;
  }
 
  // After all above condition is not
  // fulfilled below code is executed
  // this backup method was called two
  // times thus calling only single time
  updateBackupDb(true);
 
  // main db is updated based on sync
  // completed method
  updateDbMain(isSynchCompleted ? true : false);
}

这种简单的代码块的好处是–对于下一个开发者来说,非常容易调试/理解/扩展这种方法。

例2:

通过现有的JAVA API代码例子来解释这个想法

这个代码片段取自Java文档:-

JDK子字符串代码 JAVA API

上述API的现有代码–这个写的很完美

优化后

public String substring(int beginIndex, int endIndex) {
 
  // My comment - Below are the example of
  // correct use of if else, checking
  // condition and returning from // methods,
  // this is not about throwing error ie
  // return or throw error or do something
  // else - the idea is braking if // else
  // chaining.
  if (beginIndex < 0) {
    throw new StringIndexOutOfBoundsException(beginIndex);
  }
 
  if (endIndex > value.length) {
    throw new StringIndexOutOfBoundsException(endIndex);
  }
 
  int subLen = endIndex - beginIndex;
 
  if (subLen < 0) {
    throw new StringIndexOutOfBoundsException(subLen);
  }
  return ((beginIndex == 0) && (endIndex == value.length))
      ? this
      : new String(value, beginIndex, subLen);
}

如果有人在修改上述逻辑后使用下面例子中的if else,会非常复杂,但最后会产生相同的结果,所以我不喜欢如下所示的实现方式 –

优化前

public String substring(int beginIndex, int endIndex) {
 
  if (beginIndex < 0) {
    throw new StringIndexOutOfBoundsException(beginIndex);
  } else {
 
    // Again why this else block is used,
    // this need not to write, see above
    // correct implementation
    if (endIndex > value.length) {
      throw new StringIndexOutOfBoundsException(endIndex);
    } else {
 
      // This else is also not required
      int subLen = endIndex - beginIndex;
      if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
      }
    }
    return ((beginIndex == 0) && (endIndex == value.length))
        ? this
        : new String(value, beginIndex, subLen);
  }
}

在看到以上两个例子后,我们可以观察到,错误处理是在进入方法的时候进行的。这是一个很好的做法,首先处理错误情况。
总的来说,如果可以根据要求在小块中使用其他的东西,这将消除代码的复杂性,代码将易于使用/调试/维护/扩展。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程