refactoring - 为了清晰起见,重构嵌套的 IF 语句

标签 refactoring coding-style

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




我想重构这个笨拙的方法以使其更具可读性,根据我的喜好,它可以用于许多嵌套的 IF。

你会如何重构这个?

public static void HandleUploadedFile(string filename)
{
  try
  {
    if(IsValidFileFormat(filename)
    {
      int folderID = GetFolderIDFromFilename(filename);
      if(folderID > 0)
      {
        if(HasNoViruses(filename)
        {
          if(VerifyFileSize(filename)
          {
            // file is OK
            MoveToSafeFolder(filename);
          }
          else
          {
            DeleteFile(filename);
            LogError("file size invalid");
          }
        }
        else
        {
          DeleteFile(filename);
          LogError("failed virus test");
        }
      }
      else
      {
        DeleteFile(filename);
        LogError("invalid folder ID");
      }
    }
    else
    {
      DeleteFile(filename);
      LogError("invalid file format");
    }
  }
  catch (Exception ex)
  {
    LogError("unknown error", ex.Message);
  }
  finally
  {
    // do some things
  }
}

最佳答案

我会将测试中的条件反转为如果不好则 deleteAndLog,如下例所示。这可以防止嵌套并使操作靠近测试。

try{
    if(IsValidFileFormat(filename) == false){
        DeleteFile(filename);
        LogError("invalid file format");
        return;
    }

    int folderID = GetFolderIDFromFilename(filename);
    if(folderID <= 0){
        DeleteFile(filename);
        LogError("invalid folder ID");
        return;
    }
    ...

}...

关于refactoring - 为了清晰起见,重构嵌套的 IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356121/

相关文章:

c++ - 如何构建一个好的基于模板的 C++ 库?

python - PEP 8 : How should __future__ imports be grouped?

java - 这是正确的命名约定吗?

xcode - 如何重构 localizable.strings?

language-agnostic - 构造变量嵌套循环的好方法是什么?

java - 重构 Java 代码以使其可重用

JavaScript 代码约定——变量声明

python - 如何在 emacs 中使 ropemacs 更快?

javascript - 寻找重构 D3.js 风格方法链模式的方法

javascript - 何时组合通用功能? - 带初始化的公共(public)静态对象