首页 > 编程语言 >编程素养(代码随想录)

编程素养(代码随想录)

时间:2022-09-21 16:33:18浏览次数:111  
标签:nums int 代码 编程 随想录 规范 空格 命名 素养

编程素养(代码随想录)

#看了这么多代码,谈一谈代码风格!

最近看了很多录友在leetcode-master (opens new window)上提交的代码,发现很多录友的代码其实并不规范,这一点平时在交流群和知识星球里也能看出来。

很多录友对代码规范应该了解得不多,代码看起来并不舒服。

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

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

#题外话

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

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

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

  • 第一种情况:这个项目在业务上具有巨大潜力,需要抢占市场,只要先站住市场就能赚到钱,每年年终好几十万,那项目前期还关心啥代码风格,赶进度把功能撸出来,赚钱就完事了,例如12年的微信,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规范是 大括号和 控制语句保持同一行的,我个人也很认可这种写法,因为可以缩短代码的行数,特别是项目中代码行数很多的情况下,这种写法是可以提高阅读代码的效率。

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

#总结

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

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

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

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


img

上次更新:: 8/31/2022, 10:44:24 AM

自己写博客好难这是转载的孙秀洋卡哥的内容

参考网址:

1.代码随想录 https://programmercarl.com/%E5%89%8D%E5%BA%8F/%E4%BB%A3%E7%A0%81%E9%A3%8E%E6%A0%BC.html#%E9%A2%98%E5%A4%96%E8%AF%9D

--我是博客签名-- 座右铭:保持热情 版权声明:自由转载-非商用-非衍生-保持署名。 本作品采用知识共享署名 4.0 国际许可协议进行许可。 --

标签:nums,int,代码,编程,随想录,规范,空格,命名,素养
From: https://www.cnblogs.com/yepq2025/p/16716096.html

相关文章

  • 线程与网络编程
    线程与网络编程1、传统模型传统模型,主要采用阻塞IO+单独开启线程处理连接的方式,基本上是所有操作系统都支持的一种方式。主要通过一个线程不断接受连接,对于每个连接单独......
  • React 面向组件编程 之 函数式组件
    简单组件和复杂组件的概念如果组件有state(状态)属性,就是复杂组件。如果没有state(状态)属性,就是简单组件。state、props、refs是组件实例的三大核心属性,在之后会逐一进......
  • 编程逻辑
    大部分高级编程语言虽然语法不同,编译器不同,学习它们的小哥哥小姐姐们不同,但有一点却是出奇地一致:编程逻辑!有些刚入行或刚入门的童鞋可能连编程是啥意思都没弄懂,一下子又来......
  • C++05_模板元编程
    模板函数为什么需要模板函数(template)避免重复写代码inttwice(inti){returni*2;}floattwice(floatf){returnf*2;}doubletwice(doubled)......
  • C++06_函数式编程
    函数也是对象函数可以作为另一个函数的参数:#include<cstdio>template<classFunc>voidcall_wait(Funcfunc){func(0);func(1);}intmain(){au......
  • Java无难事:详解Java编程核心思想与技术 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1Ht352zrCXy9ArE-Th9fgNg点击这里获取提取码 ......
  • 根据键盘输入的三角形三边长度,利用海伦公式编程三角形面积
    提示:三角形三边(a,b,c)用海伦公式求面积公式如下:L=(a+b+c)/2面积area=(L(L-a)(L-b)(L-c))**0.5 样例输入345 样例输出6.0 样例输入6810 样例......
  • 编程计算圆面积的计算(结果保留2位小数
    提示:计算圆面积公式为area=π*radius*radius,其中π取3.14。 样例输入2 样例输出12.56 解题代码r=float(input())pi=3.14k=pi*r*rprint('%.2f'%(k......
  • C#异步编程
    受众.Net c#开发人员概念免责声明:计算机科学很多概念都没有类似数学一样严谨的定义,以下概念为个人理解程序(Program)静态模板进程(Process)程序的实例,一个程序可以有多......
  • 长文梳理muduo网络库核心代码及优秀编程细节剖析
    前言Muduo库是陈硕个人开发的Tcp网络编程库,支持Reactor模型,想学习网络库的话,也推荐大家阅读陈硕写的《Linux多线程服务端编程:使用muduoC++网络库》。本人前段时间出于个......