我不想嘲讽题主,因为题主指出了对计算机不了解的人可能会有的想法,这是很正常的事情。
我自己是这样理解的,计算机与人有一点不同,计算机作为机器,没有天生的学习能力,它只会按照程序一步一步地走下去;而人不一样,人有学习能力,我们会在实践中不断适应环境,把一些很简单的事情「内化」为下意识的行动。比如我们刚学骑自行车的时候,都会手足无措,把握不住平衡,这时想把自行车骑起来,就得花费大量的「心智」在控制自行车上;伴随着不断的练习,我们会把「控制自行车」变成下意识的行为。
从另一个方面来看,人看起来没有什么代价的行为,是因为我们的学习能力已经把这个行为「内化」了,让你察觉不到它的代价;而对于机器来说,没有学习能力的它们就没有办法「内化」,只能老老实实地该干嘛干嘛。
回到题主的问题,你可能认为「在执行中察觉异常情况」没有什么代价,但对于机器来说,这里面的代价非常大,因为机器不会自己学习什么是「正常」,什么是「异常」,这些都需要写代码的人用代码告诉机器才行,这就又回到了起点:处理异常变成了正常流程的一部分。
把「处理异常」作为「正常」程序流程的一部分,有什么好处呢?主要是效率高。
从底层来看,条件语句(if else)的代价非常低,现代计算机处理器的分支预测可以做到95%以上的正确率(来自《深入理解计算机系统》),也就是说绝大多数的条件判断都可以看做零开销的(除非在if语句里执行开销比较大的动作)。这就意味着,我们可以把能考虑到的异常情况全部组合成各种if else语句,让程序自己判断有没有异常,即使没有异常,做这些条件判断也可以看做完全没有代价的。