6.7 小结
本章我们学习了程序也会出错以及程序出错后是如何传达错误的。错误传达方法大致有两种,通过返回值传达和出错后跳转。
通过返回值传达的方法有一个问题,那就是容易忘记检查返回值从而出错。因此,长期以来,人们把更多的精力放在研究出错后跳转的方法上,这一方法成为目前被 Java、C++、Python、Ruby 等众多语言支持的异常处理机制的基础。
异常处理也有几个问题。一个是当函数有不只一个出口时,必须成对处理的操作很难正确地成对处理。另一个是即便看了代码也不知道函数将抛出何种异常。
2012 年,谷歌公司在其编程守则中禁止了 C++ 语言中异常的使用。
使用异常的优势大于它的成本,尤其是在新的项目中。但是,在已有的代码中导入异常时,有依存关系的所有代码都会受到影响。(中略)谷歌公司已有的 C++ 语言代码大多不是按异常处理实现的。因此,引入触发异常处理异常的新代码多少是有些困难的。
——《Google C++ 风格指南》23
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
23英文最新版请参考:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
谷歌公司一方面认可在新的项目中使用异常是好的,另一方面考虑到现在已经有很多不是基于异常处理实现的代码,不能使用异常。这是因为,导入异常后要成对地处理那些必须成对的操作非常困难。
Java语言的开发者为了解决第二个问题导入了检查型异常,但是这种方法并不太被接受。C# 语言的开发者一方面承认检查型异常的优势,另一方面希望有更好的方法出现。
最后的情况如我们所见,两种错误传达方法都是长处短处兼具。把握各自的优势和缺点,因地制宜地选择使用哪一种才是最为关键的。
专栏
从需要的地方开始阅读
针对面对庞大信息量心力交瘁时该怎么办的问题,我们在“学习讲求细嚼慢咽”专栏中介绍了三种方法。第一种方法就是“从需要的地方开始阅读”。
有时,我们并不需要掌握一本书或者文档的全部内容。明确阅读的目的并弄清楚为达成这一目的需要阅读哪些地方,就可以有针对性地阅读,无需在其他无关的地方花费大量精力。
或许有些人会因为不逐字逐句仔细阅读而产生负罪感。但是比起心力交瘁完全读不下去来说,还是挑挑拣拣地阅读更好吧。与其让“非全部读完不可”这样的完美主义挫败干劲,还不如放弃不读呢。要知道,干劲是多么地宝贵呀!
使用这一方法就需要对整体内容有个大致把握,并确认想阅读的部分。如果不知道如何把握整体内容,请参考接下来的专栏“先掌握概要再阅读细节”(第 8 章),试试里面介绍的方法吧!
