Re: [问题] 什么样的"错误"该用例外处理

楼主: ddavid (谎言接线生)   2021-09-29 12:50:46
※ 引述《icetofux ()》之铭言:
: 想延伸请教一个用例:假如我要存取一个未知长度std::vector中的某个元素,可
: 以先使用size()确认元素位址是否合理再进行[]存取、也可以直接用at()存取当元
: 素不存在会throw std::out_of_range,以语法长度来看其实两者都差不多,但这
: 是明显可预期会发生的异常,例外处理的资源成本也比较多高,是否代表使用前者
: 会比较合适呢?
所以我会倾向弹性思考,而不要那么基本教义派地一分为二来考虑这个问题。
就你举的例子,原本也许因为成本与概念考量所以你选择了非例外处理,但延伸
考虑另一个例子,今天你要做的事情是:
1. 让使用者输入一个std::string
2. 把该std::string用某种方式parse成很多std::vector<std::string>
3. split的每一项,用std::stoi转成int
4. 跑循环,拿第0个int除以第1个,第2个除以第3个,以此类推
里面每一项都可能出错,而且很多都预料得到(输入字串就失败、parse失败、
转int失败、数字项数非偶数、除到0等等)。
但是如果我们根本不在意是哪种错,反正有一项出错就是使用者输入失败的话呢

那比起每一项做判断,减少例外发生,我就倾向于全部用最无脑的方式写,然后
全部用同一个try-catch包起来。因为这样是合于我们对这个Job的思考方式,也非常
节省coding上的成本。
当然这么做会有一些前提,例如要验证过自己parser没写错,不然每次都parser
丢例外你以为是使用者输入错误之类。但这就是对自己的用例进行分析来决定,比如
对自己写的parser没信心,那么那段会丢的例外就指定处理或特别加写个if也行。
总之在这个问题上,我是觉得不需要那么基本教义派去做二分。真的决定要不要
遵守某种教义,那也是要等到你具备那个实力去分析不同教义的优缺点以及对自己的
适合度以后的事情。盲信教义是最危险的,特别在公司里面出现盲信教义派就往往容
易不计成本地流于形式,然后变成鬼故事XD
作者: liu2007 (è–¯)   2021-10-26 22:02:00
感谢分享经验

Links booklink

Contact Us: admin [ a t ] ucptt.com