返回值 还是 异常?

本文深入探讨了在编程中使用异常与返回值的优缺点,提供了在不同场景下选择使用异常还是返回值的指导原则,并强调了团队内部建立一致的异常处理规范的重要性。

返回值 还是 异常?

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)性。

  • 正确的使用异常,避免异常混入程序控制流。

  • 模块间接口应采用返回值方式。自己模块内的异常确保自己进行了处理。

4 参考文章

Cleaner, more elegant, and harder to recognize—By Raymond Chen
Making Wrong Code Look Wrong—Joel on software
"拥抱"异常,还是,"固守"返回值?—DCCMX 


转载于:https://my.oschina.net/maliang0130/blog/204082

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值