《C++编程规范:101条规则、准则与最佳实践》——2.2 正确、简单和清晰第一

简介:

本节书摘来自异步社区出版社《C++编程规范:101条规则、准则与最佳实践》一书中的第2章,第2.2节,作者:【加】Herb Sutter , 【罗】Andrei,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.2 正确、简单和清晰第一

摘要
软件简单为美(Keep It Simple Software,KISS):质量优于速度,简单优于复杂,清晰优于机巧,安全优于不安全(见第83条和第99条)。

讨论
简单设计和清晰代码的价值怎么强调都不过分。代码的维护者将因为你编写的代码容易理解而感谢你——而且这个维护者往往就是未来的你,要努力回忆起6个月前的所思所想。于是有了下面这些经典的格言警句。

程序必须为阅读它的人而编写,只是顺便用于机器执行。——Harold Abelson 和 Gerald Jay Sussman

编写程序应该以人为本,计算机第二。——Steve McConnell

计算机系统中最便宜、最快速、最可靠的组件还不曾出现过。——Gordon Bell[2]

所缺乏的恰恰是最精确(永不出错),最安全(坚不可摧),以及设计、文档编写、测试和维护起来最容易的部分。简单设计的重要性怎么强调也不过分。——Jon Bentley

本书中的许多条款都能够自然地产生易于修改的设计和代码,而清晰性是易于维护、易于重构的程序最必需的特征。自己不能充分理解的设计和代码,就更无法充满自信地进行修改了。

这里最常见的紧张关系恐怕就在代码清晰和代码优化(见第7条、第8条和第9条)之间。当(不是假如)你想为了性能而进行不成熟的优化因而影响了清晰性时,请回想一下第8条的要点:使一个正确的程序变快,比使一个快速的程序正确要容易得多。

要避免使用程序设计语言中的冷僻特性。应该使用最简单的有效技术。

示例
例1 不要使用不必要的或者小聪明式的操作符重载。有一个毫无必要古怪的图形用户界面库,竟然允许用户编写w+c;这样的语句表示在图形组件w上添加子控件c。(见第26条。)

例2 应该使用命名变量,而不要使用临时变量,作为构造函数的参数。这能够避免可能的声明二义性。这还经常能使代码的意图更加清晰,从而更容易维护,而且通常也更安全(见第13条和第31条)。

参考文献
[Abelson96] ● [Bentley00] §4 ● [Cargill92] pp.91-93 ● [Cline99] §3.05-06 ● [Constantine95] §29 ● [Keffer95]p.17 ● [Lakos96] §9.1, §10.2.4 ● [McConnell93] ● [Meyers01] §47 ● [Stroustrup00] §1.7, §2.1, §6.2.3, §23.4.2, §23.4.3.2 ● [Sutter00] §40-41, §46 ● [Sutter04] §29

相关文章
|
2月前
|
存储 算法 数据库
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
112 0
|
2月前
|
编译器 程序员 API
【C++ auto推导】C++中的auto关键字及其推导规则
【C++ auto推导】C++中的auto关键字及其推导规则
59 0
|
存储 安全 算法
【C++智能指针 相关应用】深入探索C++智能指针:跨进程、动态库与最佳实践
【C++智能指针 相关应用】深入探索C++智能指针:跨进程、动态库与最佳实践
69 5
|
2月前
|
安全 编译器 C++
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
【C/C++ 类型转换规则】一文了解C/C++ 中的类型转换规则,帮助你更好的编程
19 0
|
2月前
|
自然语言处理 算法 Java
C/C++ 程序员编程规范之注释
C/C++ 程序员编程规范之注释
43 1
|
2月前
|
消息中间件 负载均衡 监控
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
194 1
|
5天前
|
NoSQL API Redis
最佳实践|如何使用c++开发redis module
本文将试着总结Tair用c++开发redis module中遇到的一些问题并沉淀为最佳实践,希望对redis module的使用者和开发者带来一些帮助(部分最佳实践也适用于c和其他语言)。
|
8天前
|
安全 vr&ar C++
C++:编程语言的演变、应用与最佳实践
C++:编程语言的演变、应用与最佳实践
|
18天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
14 1
|
2月前
|
程序员 开发工具 git
【程序员英语 代码提交】C++工程师的代码提交艺术:git commit 时 精确表达与最佳实践
【程序员英语 代码提交】C++工程师的代码提交艺术:git commit 时 精确表达与最佳实践
92 1