代码规范浅谈

代码规范浅谈

代码规范这东西网上很容易百度到一堆,除了天下文章一大抄的问题,另外,多数只给了结果,原因没有充分说明,或者非常的纠结于大写小写,一个函数可以写几行的细节。感觉有点容易让新人误入歧途。

于是锅叔打算根据自己的经验分析下这些规范产生的原因,帮助新人深入理解为什么这么规定,知其然并知其所以然。

一、”代码规范”的由来

工作中如果你没怎么接手过其他同学的代码,那肯定会比接手过离职同学的代码,经常帮其他同学排查Bug的”大牛”们对 代码可维护性的理解,要差上一个数量级。

如果你没怎么参与过一个持续存在3-5年以上,需求变更频繁的系统模块的迭代开发,你也不容易理解, 代码重构对于一个稍作修改,就Bug此起彼伏的模块质量改善的重要意义。

对软件的迭代效率和质量负责任的人通常就是Team Leader,PM,这类第一责任人,他们深思熟虑一番后,得出一个重要结论,上面这些难于交接,修改困难,Bug横行的坑,很大程度上都跟代码写的不 规范有关,因此就编写了 代码规范。

二、代码规范作用

程序员的本质也是个手艺人,与大部分其他行业的施工规范的作用相似,主要是作用是

  1. 避免造成施工缺陷,提供施工质量。

  2. 方便同行交流,以便后期维护。

举个例子,锅叔家中近来正好在装修,因为不是从毛坯重头装修的,这样一些水电的走线情况就不是很清楚了,是装修前已经施工完毕的。理论上开关插座线路是可以随意的铺设的,只要联通就可以,可以一会儿排成一字,一会儿排成人字。这时比如你需要在墙上挂一副画或者镜子,需要在墙上打孔固定,那这个孔会不会打穿墙内的水电线就非常随缘了。安装师傅只能根据布线规范和经验判断,一般的电线布线在墙面是横平竖直的,不会斜着来,或者转圈圈,水管一般走天或者走地。你也就只能祈求之前施工的水电师傅是遵循这个规范来的,如果他走线很有个性导致你打坏了线路要重新维修,你一定会在心里问候他的。

三、代码规范的内容

实践中代码规范的内容很多团队应该是”借鉴”来的。锅叔其实建议,借鉴了之后,还要重视后期的调整,补充。每个团队的技术栈,项目特点会有不同,在编程上的关注点也会对应不同。代码评审不应简单的以规范为准,而应该以提高可维护为目的。评审中发现而未在代码规范中包含的内容,要及时增补。同时评审时还要注意传达规范的目的,而不仅是让大家机械遵守。

下面是一些锅叔觉得比较常见重要的,做一下简单解释说明,排名不分先后 。

1. 不要使用魔法数字

可读性,自己体会

if(deviceState == 1){
     doSomeThing();
}
//对比
if(deviceState == DEVICE_STATE_ON){
     doSomeThing();
}

2. 方法不要太长,注意分层,隐藏细节

合理分层,自行体会

function A(){
      买菜();
      备菜();
      炒菜();
}

vs

function B(){
      ......    下楼;
      打开车门;
      按下点火开关;
      打左转向灯;    鸣笛;
      开出车位;    如果遇到隔壁老王就打个招呼;
    出小区右转;    第二个十字路口左转; 
      进菜市场左转第一个摊位,买两斤黄瓜;
    拿上黄瓜,步行回车上;    扫码交车费; 
    ............

}

3. 变量,方法命名要有准确含义

function A(){
    if(a == 1){
        B();
    }else{
        C();
    }
}
//VS
function 送礼物(){
    if(用户性别 == 男){
         送茅台();
     }else{
         送古驰();
     }
}

4. 无效的逻辑要及时清理

懒得举例了,自行体会

5. 方法的功能应当与命名对应,不做超出命名范围的动作

送礼物 方法,做了他命名之外的事,很容易被调用的人错误使用

function 收礼不办事举报(){
    送礼物();
    if(不办事 并且 不是我干爹){
         举报他();
    }
}
//VS
function 送礼物(){
    if(用户性别 == 男){
         送茅台();
     }else{
         送古驰();
     }

     if(不办事){
       举报他();
    }
}

6. 用户操作的错误,要确保有错误反馈。

典型的如没有数据和发生错误,无法返回数据是不同情况,要加以区别。

代码规范浅谈

7. 系统错误应当有日志

错误要写日志, 不至于死无对证。。-_-||

8. 耗时操作要界面进行异步等待处理

让用户知道,现在正在处理,不是系统故障了。

9. 业务列表查询需要进行分页处理

当数据记录上亿时,一次全部取出,放入内存,可能会使服务器宕机……

10. ………………

Original: https://www.cnblogs.com/uncleguo/p/16143561.html
Author: 锅叔
Title: 代码规范浅谈

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607209/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 第二周作业

    第二周作业 一、显示在/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或者目录 [root@CentOS8 / ]#!mkdir mkdir /etc/…

    Linux 2023年6月13日
    085
  • DSTAT, Versatile resource statistics tool, 多功能资源统计工具;

    之前用到的一个IO监控工具,今天要使用,却忘记了名字,记录一下: dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具…

    Linux 2023年6月13日
    078
  • 为spring cloud config实现刷新动态掉的坑

    正常搭建配置中心,网上教程多,这里不讨论,只记坑也是为了后来者少花时间在这里,由于是当时研究了好久才写的文章,所以只能提供问题的原因,当然会给出印证的思路,闲话不多说进入正题! 版…

    Linux 2023年6月7日
    089
  • 修改内核中的只读区内容

    研究到 apparmor 内核源码,其中涉及到只读变量 __lsm_ro_after_init,研究怎么修改只读区实现部分功能,这里记录一下。 思路上很简单,修改的时候禁用写保护,…

    Linux 2023年6月13日
    071
  • 渐变色搭配网站(模仿)

    html;gutter:true; 渐变色</p> <pre><code> * { margin: 0; } body { display: f…

    Linux 2023年6月13日
    078
  • Golang 实现 Redis(10): 本地原子性事务

    为了支持多个命令的原子性执行 Redis 提供了事务机制。 Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行…

    Linux 2023年5月28日
    090
  • 【PHP】浅谈php实现订阅发布模式及redis的实现

    订阅发布应用场景: 1、广告推送 2、游戏公告 3、广播–短信、邮件 4、跨应用推送–使用同一个redis实例,net发布publish,php常驻内存订阅subscribe处…

    Linux 2023年5月28日
    066
  • LeetCode-459. 重复的子字符串

    题目来源 题目详情 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = “abab”输出: true解释:…

    Linux 2023年6月7日
    0108
  • 记录一次shell脚本环境全局变量在函数内部生效问题

    背景 计划核对内网IP的使用情况,所以写了个小脚本扫描有哪些IP还在使用。执行脚本过程中发现函数中一直获取不到变量的值,排查后将结论记录下来。 问题现象 已经配置了全局变量,但是在…

    Linux 2023年6月14日
    088
  • cdn缓存顺序优先级

    posted @2022-09-26 17:28 爱折腾的大臭臭 阅读(10 ) 评论() 编辑 Original: https://www.cnblogs.com/linuxsh…

    Linux 2023年6月6日
    0101
  • batch批处理笔记

    1. echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显。一般批处理第一行都是这个 echo on …

    Linux 2023年6月7日
    082
  • Docker搭建Redis Cluster集群及扩容和收容

    上一篇文章讲解了Redis集群原理及搭建,由于工作中使用docker较多,本文主要讲解使用docker搭建集群及对集群的扩展收容。环境:Centos7.6Docker:20.10….

    Linux 2023年6月13日
    069
  • 阿里云Redis开发规范

    (1)【建议】: 可读性和可管理性 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id <span class="hljs-sele…

    Linux 2023年5月28日
    0110
  • ShardingSphere-proxy-5.0.0企业级分库分表、读写分离、负载均衡、雪花算法、取模算法整合(八)

    一、简要说明 以下配置实现了: 1、分库分表 2、每一个分库的读写分离 3、读库负载均衡算法 4、雪花算法,生成唯一id 5、字段取模 6、解决笛卡尔积问题 7、设置默认所有表不进…

    Linux 2023年6月14日
    074
  • 数据库简单查询

    简单查询 语法句式如下: SELECT filed1,filed2 … filedn FROM tablename [WHERE CONDITION11] [GROUP BY …

    Linux 2023年6月7日
    0115
  • Python:给定一个不超过5位的正整数,判断有几位

    方法一:作比较 方法二:使用整除实现,除完后如果是个0或不是个0,这种方法引入了计算,效率会降低,所以能加就不要减,能乘就不要除,能不计算就不计算 方法三: 方法四:字符串处理实现…

    Linux 2023年6月7日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球