返回值 还是 异常?

返回值 还是 异常?

1 异常

 

1.1 好处

  1. 提高代码可读性

    根据区块来区分开正常流程和异常处理

  2. 可迅速追溯到错误源头
  3. 类库定义的异常基类本身能提供很多的信息,如InnerException,StackTrace等

1.2 坏处

  1. 阅读代码时,人眼无法轻易辨认出隐藏的异常
    DoSomething1();
    DoSomething2();
    

    假设DoSomething1中会抛出异常,通过代码无法一眼看出DoSomething2是否会被执行。
    如果需要确认DoSomething2是否会被执行,你需要了解DoSomething1会抛出哪些异常。
    如果DoSomething1有关于会抛出的异常说明,那还算容易,否则你需要查看整个DoSo-
    mething1调用树结构。

  2. 一些性能开销
  3. 语言通用性问题

    假如各模块由不同的语言写成,则只能在模块内使用异常。换言之,各语言的异常处理不具备通用性。

2 返回值

 

2.1 好处

  1. 没有异常的性能问题
  2. 单看代码,很容易辨认程序处理流程
  3. 很多情况下,客户代码编写者会处理返回值,但经常遗漏处理异常。

2.2 坏处

  1. 特定场景使用限制

    构造函数,线程处理函数等不允许有返回值的情况,以及返回值被用作其他用途的情况

  2. 客户代码不够清晰,正常流程代码与错误代码混在一起
    if (returnVal == Success)
    {
        //DoNormalFlow
    }
    else if (returnVal == ERR1)
    {
        //Handle ERR
    }
    

3 我的理解

  • 追求 稳定 高性能 的程序,慎用异常。
  • 团队应为异常处理方式建立规范,以保证项目的统一(Consistency)性。
  • 正确的使用异常,避免异常混入程序控制流。
  • 模块间接口应采用返回值方式。自己模块内的异常确保自己进行了处理。

 

你可能感兴趣的:(返回值)