本周又是N皇后,又是解数独,还来了个回溯算法大总结,信息量非常大,录友们需要消化消化,所以今天聊一聊轻松的,但又会受用终身的内容,哈哈。

其实在交流群里经常能看到大家发出来的代码,可以看出很多录友对代码规范应该不甚了解,代码看起来并不舒服。

所以呢,我给大家讲一讲代码规范,我主要以C++代码为例。

需要强调一下,代码规范并不是仅仅是让代码看着舒服,这是一个很重要的习惯。

题外话

工作之后,特别是在大厂,看谁的技术牛不牛逼,不用看谁写出多牛逼的代码,就代码风格扫一眼,立刻就能看出来是正规军还是野生程序员

很多人甚至不屑于了解代码规范,认为实现功能就行,这种观点其实在上个世纪是很普遍的,因为那时候一般写代码不需要合作,自己一个人撸整个项目,想怎么写就怎么写。

现在一些小公司,甚至大公司里的某些技术团队也不注重代码规范,赶进度撸出功能就完事,这种情况就要分两方面看:

  • 第一种情况:这个项目在业务上赚到钱了,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如15年的王者荣耀。

  • 第二种情况:这个项目没赚到钱,半死不活的,代码还没有设计也没有规范,这样对技术人员的伤害就非常大了。

而不注重代码风格的团队,99.99%都是第二种情况,如果你赶上了第一种情况,那就恭喜你了,本文下面的内容可以不用看了,哈哈。

代码规范

变量命名

这里我简单说一说规范问题。

权威的C++规范以Google为主,我给大家下载了一份中文版本,在公众号「代码随想录」后台回复:googlec++编程规范,就可以领取。

具体的规范要以自己团队风格为主,融入团队才是最重要的。

我先来说说变量的命名。

主流有如下三种变量规则:

  • 小驼峰、大驼峰命名法
  • 下划线命名法
  • 匈牙利命名法

小驼峰,第一个单词首字母小写,后面其他单词首字母大写。例如 int myAge;

大驼峰法把第一个单词的首字母也大写了。例如:int MyAge;

通常来讲 java和go都使用驼峰,C++的函数和结构体命名也是用大驼峰,大家可以看到题解中我的C++代码风格就是小驼峰,因为leetcode上给出的默认函数的命名就是小驼峰,所以我入乡随俗

下划线命名法是名称中的每一个逻辑断点都用一个下划线来标记,例如:int my_age下划线命名法是随着C语言的出现流行起来的,如果大家看过UNIX高级编程或者UNIX网络编程,就会发现大量使用这种命名方式

匈牙利命名法是:变量名 = 属性 + 类型 + 对象描述,例如:int iMyAge,这种命名是一个来此匈牙利的程序员在微软内部推广起来,然后推广给了全世界的Windows开发人员。

这种命名方式在没有IDE的时代,可以很好的提醒开发人员遍历的意义,例如看到iMyAge,就知道它是一个int型的变量,而不用找它的定义,缺点是一旦该变量的属性,那么整个项目里这个变量名字都要改动,所以带来代码维护困难。

目前IDE已经很发达了,都不用标记变量属性了,IDE就会帮我们识别了,所以基本没人用匈牙利命名法了,虽然我不用IDE,VIM大法好。

我做了一下总结如图:

水平留白(代码空格)

经常看到有的同学的代码都堆在一起,看起来都费劲,或者是有的间隔有空格,有的没有空格,很不统一,有的同学甚至为了让代码精简,把所有空格都省略掉了。

大家如果注意我题解上的代码风格,我的空格都是有统一规范的。

我所有题解的C++代码,都是严格按照Google C++编程规范来的,这样代码看起来就让人感觉清爽一些

我举一些例子:

操作符左右一定有空格,例如

i = i + 1;

分隔符(,;)前一位没有空格,后一位保持空格,例如:

int i, j;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++)

花括号和函数保持同一行,并有一个空格例如:

while (n) { n--;
}

控制语句(while,if,for)前都有一个空格,例如:

while (n) { if (k > 0) return 9;n--;
}

以下是我刚写的力扣283.移动零的代码,大家可以看一下整体风格,注意空格的细节!

class Solution {
public:void moveZeroes(vector<int>& nums) {int slowIndex = 0;for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {if (nums[fastIndex] != 0) {nums[slowIndex++] = nums[fastIndex];}}for (int i = slowIndex; i < nums.size(); i++) {nums[i] = 0;}}
};

当然我并不是说一定要按照Google的规范来,代码风格其实统一就行,没有严格的说谁对谁错。

总结

如果还是学生,使用C++的话,可以按照题解中我的代码风格来,还是比较标准的。

如果不是C++就自己选一种代码风格坚持下来,

如果已经工作的录友,就要融入团队的代码风格了,团队怎么写,自己就怎么来,毕竟不是一个人在战斗。

就酱,以后我还会陆续分享,关于代码,求职,学习工作之类的内容。

我是程序员Carl,可以找我组队刷题,本文leetcode刷题攻略已收录,更多精彩算法文章尽在公众号:代码随想录,关注后就会发现和「代码随想录」相见恨晚!

如果感觉题解对你有帮助,不要吝啬给一个

看了这么多代码,谈一谈代码风格!相关推荐

  1. Linux位置无关代码实现,浅谈位置无关代码

    原标题:浅谈位置无关代码 引言 最近参与的一个项目涉及到了二进制重写相关的问题,也因此看了几篇相关工具的论文.与之前曾经一直想做的动态装载有不少重合,因此在此做一个整理. 本文主要整理了动态库装载地址 ...

  2. 青春不常在,抓紧谈恋爱——html代码

    一个简单的相亲html代码 效果如下: 代码如下: <!DOCTYPE html> <html><head><meta charset="utf-8 ...

  3. chajian8.com谈:SyntaxHighlighter 代码高亮

    题外话:上次提到的显示各种微博的 WordPress 插件进度可喜,已经完成了九个微博的 OAuth.Basic HTTP 验证部分. 写这篇文章时我非常郁闷,因为这篇本是介绍如何智能判断加载 Syn ...

  4. 为什么要进行图学习?谈一谈逆势而上的图神经网络

    点击上方 蓝字关注我们 问一问近几年来逆势而上的技术有什么?相信你一定会说出来一个:图神经网络. 图神经网络将会在人工智能的各个领域起着非常重要的作用,虽然目前还没有完全成为各大顶会的焦点,但不可否认 ...

  5. 怎么学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  6. Java程序员谈一谈-----java程序员成长之路

    转载:http://www.banzg.com/archives/679.html?ref=myread 阿里面试回来,想和Java程序员谈一谈 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力 ...

  7. 谈一谈Http Request 与 Http Response

    谈一谈Http Request 与 Http Response 写在前面的话:最近帮朋友弄弄微信商城,对于微信的基础开发,基本上就是各种post.get,有时是微信服务器向我们的服务器post.get ...

  8. 怎么自学python-结合学习经历,谈一谈如何学习Python

    结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...

  9. 谈一谈游戏AI - 行为树

    不要用过去的成绩看未来,而是要用未来的眼睛看现在. 郑重说明:本文适合对游戏开发感兴趣的小白初学者,本人力图将事物用简单的语言表达清楚,但水平有限,能力一般,文章如有错漏之处,还望批评指正. 在本系列 ...

  10. 写在工作的第十年: 谈一谈专注和基础的重要性

    写在工作的第十年: 谈一谈专注和基础的重要性 老帮菜的自我吐槽 不知不觉, 作为一个打工人, 作为一个写程序的打工人, 职业生涯的第十个年头悄然而至. 从一个充满雄心壮志的有志青年, 到如今有家有室的 ...

最新文章

  1. Windows下 安装Oracle Java 11 并设置环境变量
  2. 浅析网站排版如何让用户获得良好的访问体验
  3. Use Excel Pivot Table as a BI tool
  4. 延迟加载图片并监听图片加载完成
  5. Smalidea+IntelliJ IDEA/Android Studio无源码调试
  6. [Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效
  7. 机器学习的练功方式(六)——朴素贝叶斯
  8. linux加密框架 crypto 算法管理 - 应用角度讲解加密框架的运行流程
  9. 关于如何在BCB中使用CodeGuard
  10. 文本聚类分析算法_聚类分析算法综述
  11. C语言-字符串处理函数strcpy
  12. bzoj 2882: 工艺【SAM】
  13. 创业公司引导页html5模板
  14. 基于单片机的自动加热水壶控制器代码_应用于实时温度控制的单片机设计
  15. git 操作的时候总是要输入账号和密码
  16. python鼠标拖拽功能_python 基于selenium实现鼠标拖拽功能
  17. java贴图技术坦克世界_坦克世界游戏图像设置技巧 如何提高FPS
  18. html+css实现自定义图片上传按钮
  19. YY游戏云的AngularJS实践
  20. 互联网日报 | 携程实现疫情以来首季度盈利;360安全浏览器辟谣收费传闻;滴滴再推123全民拼车日...

热门文章

  1. IOS开发之----四舍五入问题
  2. IoC框架(依赖注入 DI)
  3. 机器学习中的距离/散度/熵
  4. 错误 C2280 Union : 尝试引用已删除的函数 以及 警告 C4624 “Grade”: 已将析构函数隐式定义为“已删除”的一种解决方法...
  5. Linux下安装和卸载jdk步骤详述
  6. Angular - - ng-focus、ng-blur
  7. hihocoder1187 Divisors
  8. 菲佣WPF——3(关于INotifyPropertyChanged的使用的想法)
  9. 1.枚举类型、声明指针、常量、存储类型、运算符优先级记忆
  10. MySpace:.Net架构网站的王者