查看: 703|回复: 0

[讨论] 如何写出好代码?附资深码农的个人代码规范

[复制链接]
  • TA的每日心情

    2018-11-20 13:41
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2019-8-16 09:38:09 | 显示全部楼层 |阅读模式
    分享到:
    22.jpg 作为一个程序员,肯定希望能写出一手好代码,看起来赏心悦目,又易于理解。虽说好的代码是在一定代码量的基础上积累起来的,但在写代码之初就应该有意识地去遵循一定的规范。

    以下是两位工程师对于代码规范的一些总结,很有代表性,分享给大家。

    代码不是一次性的,要为未来写代码

    最近的几件事情让我对代码规范的重要性有了更深的体会,决定自己做些总结。

    情景一:一个不大的项目,由几个人共同完成。某日,由于业务需求变更,需要改动我这边的部分逻辑,但当时我不在,项目组的成员决定由他们来改,但翻了我的代码,硬是没找到该逻辑在哪实现的^_^。后来听了他们的描述,很伤……

    情景二:负责一个项目的源代码流程测试,一期代码并非模块化实现,6K多的shell脚本即使有注释,看着那个头疼,后来在我们提出该问题后,开发重新进行了设计和规范,拿到代码的那一刻顿时感觉清晰多了。

    都说代码是程序员的第二张脸,长时间下来,写的好的代码定会受到大家的尊重。遵循一些简单的规范,写干净一致的代码!把个性用在写出最简单易懂的代码上面,而不是晦涩冗余无用的代码,甚至自我签名!设计良好的结构和模式,撰写干净易懂的代码,对空间的尊重,对代码的尊重。这样能赢得别人的尊重!记住代码不是一次性的,需要重复的修改和重构,为未来写点代码!

    1,写干净整洁的代码

    1.1 代码格式化,包括多级代码缩进、大括号(比如C系代码),为了提高代码的美观型和易读性,区间与区间之间最好以一行*或-之类的间距;

    1.2 合理运用空行。空行可以用来隔开相对独立的代码块,有利于阅读和理解。但是不要使用超过一行的空行,对空间,别太奢侈了;

    2,命名规范
    命名包括函数、变量、类(面向对象中)、命名空间等;
    2.1命名需要遵循由其命名便知道其意义的原则;
    变量命名区分全局变量、导出变量、常量、局部变量,最好区分类型(如果有的话);
    2.2 可采用业界的一些命名规范,比如匈牙利命名,但同一个项目必须统一;

    3,高效使用注释

    3.1 注释代码段,注释逻辑选择。上面提到运用空行分割开逻辑相对独立的代码,那么请在空行的下一行也写点下面代码段要干什么的语句吧。如果有if else等逻辑选择的时候,麻烦也花几秒钟写上判断的依据和结果好吗?逻辑难懂且关键,您懂的!

    3.2 为不容易理解类变量注释。类变量特别是私有的类变量没有人要求注释,但是为了能够快速的了解您表示的是什么,还是写点什么吧!您知道我英文不算好!

    3.3 独立的代码模块、文件、函数需要撰写注释以说明其实现意图、原理、怎么使用等(比如函数的输入输出参数等),独立的代码文件和模块(比如类)最好写上作者、日期、联系方式、版本号等信息,以便后期做追踪;

    3.4 并不是注释越多越好,相反,完全模块化、结构化的程序很多地方注释完全可以精简;

    4,程序结构化、模块化

    4.1 程序设计中有很多原则、设计模式,不同的语言、不同的情景可能会有些差异,但整体需要支持高类聚、低耦合的设计实现方案;

    4.2 养成写开发文档的习惯。对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人;对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。

    4.3 始终要记住的是你写出的代码并不是给你一个人看的,你需要保证你的代码清晰、一致,别的程序员能够读懂,团队里面最好定期有code review环节。

    5,多读优秀的源代码、多实践

    5.1 看别人代码时要汲取好的方法和技巧。

    5.2 接触一项技术要深入了解和实践,请问您做过的系统您现在都可以从零开始搭建起来了吗,我的意思是架构搭建哦!(以上部分内容摘自https://blog.csdn.net/bullbat/article/details/9265351,作者:bullbat)

    代码写多了,总结出适合自己的代码风格

    1、类型的宏替换
    1)要求要求用“#ifndef”判断是否之前被定义过。2)举例


    • #ifndef GUA_U8
    • typedef unsigned char GUA_U8;
    • #endif

    • #ifndef GUA_U16
    • typedef unsigned short GUA_U16;
    • #endif

    • #ifndef GUA_U32
    • typedef unsigned long GUA_U32;
    • #endif


    2、宏定义1)要求①宏全为大写的英文字母。②宏的名称应能读出其功能作用。2)举例


    • #define GUA_RF_COMMUNICATION_JUDGMENT_FALSE     0
    • #define GUA_RF_COMMUNICATION_JUDGMENT_TRUE      1


    3、变量1)要求①变量名称前的字母含义要求如下g:global全局。a:array数组。s:static静态。c:const不变常数。n:变量。p:指针。②变量的名称应能读出其功能作用。
    2)举例

    • GUA_U8 gaGUA_USART1_rx_buf[GUA_USART1_RX_SIZE] = {0};        //全局数组
    • GUA_U8 gnGUA_USART1_rx_buf = 0;                                //全局变量
    • GUA_U8 nGUA_USART1_rx_buf = 0;                                //局部变量
    • static GUA_U8 snGUA_USART1_rx_buf = 0;                        //静态变量
    • const static GUA_U8 csnGUA_USART1_rx_buf = 0;                //const类型的静态变量
    • GUA_U8 *gpGUA_USART1_rx_buf;                                //全局指针


    3、if1)要求①“{”与“}”要对齐。②if与else的上方要注释。2)举例

    • //如果计数值大于10,则返回true
    • if(nGUA_Num > 10)
    • {
    • return true;
    • }
    • //如果计数值小于10,则返回false
    • else
    • {
    • return false;
    • }


    4、switch1)要求①switch、case、default上都要注释。②每种情况的具体处理由“{}”包含。2)举例

    • //如果为0则关灯
    • switch(nbGUA_Char6[3])
    • {
    • //关灯
    • case 0x00:
    • {
    • P1_1 = 0;               //拉低P11
    • P1SEL &= ~(1 << 1);     //设置P11为IO口
    • P1DIR |= (1 << 1);      //设置P11为输出

    • break;
    • }

    • //开灯
    • case 0x01:
    • {
    • P1_1 = 1;               //拉高P11
    • P1SEL &= ~(1 << 1);     //设置P11为IO口
    • P1DIR |= (1 << 1);      //设置P11为输出

    • break;
    • }

    • //其它
    • default:break;
    • }


    5、文件及函数注释1)文件注释要求至少要包含文件名称、文件作用说明、编码人、最后修改时间。2)函数注释要求至少要包含函数名称、函数作用说明、形参含义、返回值含义、编码人、最后修改时间。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 01:58 , Processed in 0.117078 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.