【腾讯云】11.11 云上盛惠,云产品限时抢购,1核2G云服务器首年88元

搜搜吧

查看: 7|回复: 0

[资讯] 看了这么多代码,谈一谈代码风格!

[复制链接]
  • TA的每日心情
    奋斗
    昨天 13:34
  • 签到天数: 703 天

    [LV.9]以坛为家II

    超级钻石贵宾会员

    1万

    主题

    2万

    帖子

    5万

    积分

    Rank: 1

    UID
    15343
    威望
    -561
    贡献
    8107
    在线时间
    372 小时
    注册时间
    2015-10-12
    发表于 4 天前 | 显示全部楼层 |阅读模式

    57600c33b84ab7e504d6ff9632387a24.jpg-wh_651x-s_937915239.jpg

    ❝本周又是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大法好。

    我做了一下总结如图:

    400f817abf2561f6ebb30df99b30b40e.png-wh_600x-s_2848222732.png



    编程风格

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

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

    「我所有题解的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& 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 = 0;
    •         }
    •     }
    • };

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

    总结

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

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

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

    本文转载自微信公众号「 代码随想录  」,可以通过以下二维码关注。转载本文请联系 代码随想录  公众号。

    搜搜吧社区温馨提示:
    搜搜吧(www.sosoba.org)十分重视网络版权及其他知识产权的保护,针对网络侵权采取如下版权政策:
    1、本站有理由相信网友侵犯任何人的版权或作品,(图文,文字,下载,视频,非法传播),本站有权不事先通知即删除涉嫌侵权的作品和内容
    2、本站将采取必要的网络技术手段,确认为侵权作品或内容的用户有权进行警告、屏蔽、删除的行为,尽可能的防止侵权行为的发生
    3、搜搜吧影视资源均收集自互联网,没有提供影片资源存储,也未参与录制上传,若本站收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除
    4、搜搜吧,删帖,投诉,举报,侵权,若本站侵犯您的权益,附上身份及权利证明,请直接发送邮件到 kefu-sosoba@qq.com 我们将在一个工作日内删除
    过年了,祝各位新年快乐
    Powered by www.sosoba.org Copyright © 2013-2020 搜搜吧社区 小黑屋|手机版|地图|联系站长|腾讯云代金券|帮助中心|公共DNS|seo优化服务|搜搜吧
    广告服务/项目合作/会员购买:QQ 侵权举报邮箱: kefu-sosoba@qq.com  搜搜吧建站时间:创建于2013年07月23日
    免责声明:本站所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,搜搜吧不承担任何的法律责任,若有侵权请来信告知,我们立即删除!

    GMT+8, 2020-11-24 13:41 , Processed in 0.056949 second(s), 9 queries , MemCache On.

    快速回复 返回顶部 返回列表