在方法开始和结束时进行错误处理的优缺点是什么?

本文关键字:处理 错误 优缺点 是什么 开始 方法 结束 | 更新日期: 2023-09-27 18:01:16

以我的程序员经验,我有混合错误处理所有可能的方式…我创造了我的个人风格。

然而,我想听到你认为在方法开始和结束时处理错误的优缺点

开头处理:

public String GenerateSomeStringData(String data, int value)
{
    if (data == null)
        throw new ArgumentNullException("data");
    if (value <= 0)
        throw new ArgumentException("value must be greater than zero");
    int dataValue;
    if (!int.TryParse(data, out dataValue))
        throw new InvalidOperationException("data does not contain an integer");
    return dataValue * 4 + value / 12;
}

结尾的处理:(同样的例子)

public String GenerateSomeStringData(String data, int value)
{
    if (data != null)
    {
        if (value > 0) 
        {
            int dataValue;
            if (int.TryParse(data, out dataValue))
            {
                return dataValue * 4 + value / 12;
            }
            else 
                throw new InvalidOperationException("data does not contain an integer");
        }
        else 
            throw new ArgumentException("value must be greater than zero");
    }
    else 
        throw new ArgumentNullException("data");
}

在决定如何处理这个问题时,您使用什么标准?可读性、可维护性、简洁性?

在方法开始和结束时进行错误处理的优缺点是什么?

输入的有效性应该是执行方法的先决条件-因此,我将(并且确实)总是首先执行错误处理。

这有以下优点:

  • 对于人来说更容易解析:然后,首先验证前提条件执行逻辑(通常

  • 明确关注点之间的分离错误处理和执行逻辑

  • 验证逻辑没有"撒入"执行逻辑中

正如在注释中提到的,你必须区分违反先决条件并触发错误条件(如抛出异常)的无效输入和构成边缘条件(即需要一些特殊逻辑来处理)的有效输入。后一种情况我将在断言前提条件之后,在方法的执行逻辑开始时单独处理。

正如其他人提到的,我会在执行方法的任何核心逻辑之前检查输入的有效性。这不仅在逻辑上有意义,而且还减少了代码的缩进,保证了if{}语句不会太长,以至于无法在一个屏幕上看到else

第一种方法要好得多。

它帮助您将所有验证保存在一个地方。您甚至可以编写一个泛型函数来处理这种类型的验证。

显然可读性更强。在开始的时候,您已经完成了所有的验证,因此您可以开始执行实际的逻辑。

如果你的代码跨度稍微大一点,就很难追踪If循环的右括号

我的意见是:先做错误条件检查,为别人明确定义什么是可以的方法,什么是不可以的