如何写出高质量的代码 -- 给所有编程学习者的一个建议
目录
- 写在开篇之前
- 1、文件结构
- 1.1、头文件结构
- 1.2、定义文件的结构
- 1.3、目录结构
- 2、程序的版式
- 2.1代码行
- 2.2代码行内的空格
- 2.3对齐
- 3、命名规则
- 3.1共性规则
- 3.2 简单的 Windows 应用程序命名规则
- 写在最后
写在开篇之前
在日常的学习、生活中,拥有良好的行为习惯可以让我们受益无穷,同样,对于我们程序员来说,养成一个好的编程习惯,形成良好的代码风格也会给我们带来许多好处,比如:
- 使我们的代码看起来更加简洁、美观。
- 便于我们自己后续对代码进行修改与理解。
- 便于他人对我们的代码进行阅读与维护。
- 大大减少我们代码出现Bug的概率。
我们可以个人的代码风格比作“书法”,好的“书法”可让人对程序一目了然,看得兴致勃勃,而差的“书法”却如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。但是,由于国内大学的计算机教育对高质量程序设计的观念灌输较弱,同时教师们和学生们也很少自觉关心软件的质量,导致很大部分大学生甚至是行业从业者对代码的正确性、健壮性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植性等质量属性了解甚少,更不用说运用自如。
本人有幸在一个偶然的机会中接触了浙江大学计算机应用博士林锐的著作《高质量C/C++编程指南》,这本书让我知道了什么是优秀的代码风格,也很大程度上改变了我的编程习惯,所以,今天我以这本书里面的内容为基础写下了这篇文章,来和大家共同探讨学习好的代码风格,希望与诸君共勉。
1、文件结构
1.1、头文件结构
头文件应由三部分内容组成:
(1)头文件开头处的版权和版本声明。
(2)预处理块。
(3)函数和类结构声明等
【规则 1-2-1】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预 处理块。
【规则 1-2-2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
【规则 1-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开 始搜索)。
【建议 1-2-1】头文件中只存放“声明”而不存放“定义。
1.2、定义文件的结构
定义文件有三部分内容:
(1) 定义文件开头处的版权和版本声明。
(2) 对一些头文件的引用。
(3) 程序的实现体。(包括数据和代码)
1.3、目录结构
如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级目录)。
如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。
2、程序的版式
2.1代码行
【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。
【规则 2-2-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。这样可以防止书写失误。
2.2代码行内的空格
【规则 2-3-1】关键字之后要留空格。像 const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。像 if、for、while 等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
【规则 2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
【规则 2-3-3】‘,’之后要留空格,如 Function(x, y, z)。如果‘;’不是一行的结束符号,其后要留空格,如 for (initialization; condition; update)。
【规则 2-3-4】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。
【规则 2-3-5】一元操作符如“!”、“~”、“++”、“–”、“&”(地址运算符)等前后不加空格。
【规则 2-3-6】象“[]”、“.”、“->”这类操作符前后不加空格。
【建议 2-3-7】对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))。
2.3对齐
【规则 2-4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。
【规则 2-4-2】{ }之内的代码块在‘{’右边数格处左对齐。
3、命名规则
3.1共性规则
1、标识符应当直观且可以拼读,可望文知意,不必进行“解码”。标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。
2、标识符的长度应当符合“min-length && max-information”原则。
3、命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如 Windows 应用程序的标识符通常采用“大小写”混排的方式,如 AddChild。而 Unix 应用程序的标识符通常采用“小写加下划线”的方式,如add_child。
4、程序中不要出现仅靠大小写区分的相似的标识符。
5、程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但会使人误解。
6、变量的名字应当使用“名词”或者“形容词+名词”。
7、反义词组命名具有互斥意义的变量或相反动作的函数等。
8、尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的确需要编号。
3.2 简单的 Windows 应用程序命名规则
1、类名和函数名用大写字母开头的单词组合而成。
2、变量和参数用小写字母开头的单词组合而成。
3、常量全用大写的字母,用下划线分割单词。
4、静态变量加前缀 s_(表示 static)。
5、如果不得已需要全局变量,则使全局变量加前缀 g_(表示 global)。
6、类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与成员函数的参数同名。
7、为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准 OpenGL 的所有库函数均以 gl 开头,所有常量(或宏定义)均以 GL 开头。
写在最后
上面是林锐博士《高质量C/C++编程指南》中提到的一部分优秀代码风格,但是,却已经能够让我们写出来的程序的规范度的超过80%的人;在这里我强烈建议大家去阅读一下林锐博士的这本书,而且这本书一共也就101页,静下心来一天就能看完,并且希望大家能把其中的代码规范应用于自己的日常代码书写中。
最后,附上《高质量C/C++编程指南》电子版书籍 (百度网盘链接):
提取码:yzpq
如何写出高质量的代码 -- 给所有编程学习者的一个建议相关推荐
- 如何在面试时写出高质量的代码
摘要:有些程序员由于平时没有养成良好的编程习惯,在面试时写出的代码质量不高,最终遗憾地与心仪的公司和职位失之交臂.如何在面试时能写出高质量的代码,是很多程序员关心的问题. 程序员在职业生涯中难免要接受 ...
- 如何才能写出“高质量”的代码?
作为一个已经写了十几年代码的程序员,做好软件不是全部围绕代码而展开,换句话讲一个程序员的程序员优秀不仅仅体现在代码上,更要有内在的编程思想说的层次再高深点就是框架思想.很多初学者都会存在很多疑问,觉得 ...
- 11月9日云栖精选夜读 | 如何才能写出“高质量”的代码?
作为一个已经写了十几年代码的程序员,做好软件不是全部围绕代码而展开,换句话讲一个程序员的程序员优秀不仅仅体现在代码上,更要有内在的编程思想说的层次再高深点就是框架思想.很多初学者都会存在很多疑问,觉得 ...
- 写出高质量的代码——“零星”总结(延续3)
特别是在C++如何使用C C++中使用C的程序库,实现C++和C的混合编程:extern "C" { /* code */ }一定要加在C++的代码文件里才干起作用. //C编译器 ...
- 如何用 GitHub Actions 写出高质量的 Python代码?
这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出的代码既优雅,又符合所有最佳实践,且已经过完备测试. 作者 | Wojciech Krzywiec 译者 ...
- 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?
文章目录 如何评价代码质量的高低? 最常用的评价标准有哪几个? 1. 可维护性(maintainability) 2. 可读性(readability) 3. 可扩展性(extensibility) ...
- 如何才能写出高质量代码
提醒:在发布作品前,请把不需要的内容删掉. 你是否曾经为自己写的代码而感到懊恼?你是否想过如何才能写出高质量代码?那就不要错过这个话题!在这里,我们可以讨论什么是高质量代码,如何写出高质量代码等问题. ...
- 小白程序员怎么由量变到质变写出高质量代码
小白程序员怎么由量变到质变写出高质量代码?很多老程序员从事开发多年,有这样一种感觉,查看一些开源项目,如Spring.Apache Common等源码是一件赏心悦目的事情,究其原因,无外两点: 1.代 ...
- 如何写出高质量代码——站在巨人的肩膀上
如何写出高质量代码--站在巨人的肩膀上 高质量代码的三要素:可读性,可维护性,可变更性 可读性强 可维护性:适应软件在部署和使用中的各种情况 1.3 可变更性:因需求变化而对代码进行修改 牛顿曾经说过 ...
- 如何写出高质量的文章:从战略到战术
目录 一.背景 1.1 写作背景 最近 CSDN 举办创作之秋和国庆征文活动,作为创作之秋的"创作领航导师",也需要对参与活动的同学进行的指导. 借着这个机会,对 "如何 ...
最新文章
- guava Throwables类文档翻译及用法入门
- .16-浅析webpack源码之编译后流程梳理
- Oracle中RAISE异常详解
- les物流执行系统_物流LES系统上线啦
- Oracle中的wmsys.wm_concat
- 计算机组成西电裘答案,西电计算机组成原理.ppt
- HTML(4)---HTML 基础
- apache php 503,宝塔linux面板 apache网站访问报错503 Service Unavailable解决
- 动态的显示当前的时间---setInterval的用法
- 菜鸟也玩系统安装盘的集成(图文教程)
- 比赛计分软件部分界面抓图
- Excel知识技能汇总
- 苹果系统服务器状态,苹果开发者中心app显示黄色状态详情介绍
- dataframe读取以文本形式储存的excel中的数字
- JAVA CRC-CCITT (Kermit)!!内网仅此一份
- 机器学习思维导图(更新中)
- OAK 3D人工智能相机和RealSense系列相机的对比
- 克33+9爆利拉德阿德32分 马刺24分大胜开拓者
- Android使用FFmpeg开发播发器(一)编译FFmpeg
- 解决React-Native reload hot reloading 后代码不更新问题
热门文章
- 使用Power Query从Web页面获取图像到Power BI报告中
- MVC Area领域处理以及T4MVC的使用
- [daily][device] linux挂载iphone
- Aspose.Cell 导出和导入Excel
- 【SAS NOTES】数据输出-proc export
- 清除1188.com
- matlb:图像的几何矩,中心矩,Hu不变矩(含代码)
- 评定数据之间的相似度指标----距离
- 基于sklearn框架实现线性回归,多项式回归和支持向量机的项目实战
- 360两个html页面合并,如何用html2pdf把多个连接的PHP网页合并成一个pdf?