代码规范浅谈

代码规范浅谈

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

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

一、”代码规范”的由来

工作中如果你没怎么接手过其他同学的代码,那肯定会比接手过离职同学的代码,经常帮其他同学排查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)

大家都在看

  • 缓冲区溢出二:从缓冲区溢出到获取反弹shell实例

    一、说明 之前写过一篇”缓冲区溢出一:函数调用过程中的堆栈变化及缓冲区溢出利用原理“,道理讲得还可以,但现在看还是需要一个示例来讲解从攻击角度如何实现返回地…

    Linux 2023年5月28日
    0113
  • Nginx几种负载均衡方式介绍

    Nginx几种负载均衡方式介绍 前言 负载均衡就是Nginx将请求分摊到不同的服务器中,保证服务的可用性,缓解服务压力,保证服务的响应速度,即使某一个应用服务不可用,也可以保证业务…

    Linux 2023年6月6日
    0116
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    092
  • Linux进程调度器

    完全公平调度器 用黑体标出的是文章的主线,未用黑体标出的内容是对黑体内容的解释或注解。 每次调用调度器时,它会挑选具有最高等待时间的进程,把CPU提供给该进程。如果经常发生这种情况…

    Linux 2023年6月13日
    087
  • 国产银河麒麟Kylin V10操作系统-如何把常用文件夹加入左侧侧边栏(类似windows文件资源管理器中的收藏夹)

    国产银河麒麟Kylin V10操作系统-如何把常用文件夹加入左侧侧边栏(类似windows文件资源管理器中的收藏夹) 第一步:确保侧边栏正确显示。 打开”我的电脑&#8…

    Linux 2023年6月14日
    0157
  • Java实现哈希表

    2.1、哈希冲突 冲突位置,把数据构建为链表结构。 装载因子=哈希表中的元素个数 / (散列表)哈希表的长度 装载因子越大,说明链表越长,性能就越低,那么哈希表就需要扩容,把数据迁…

    Linux 2023年6月14日
    087
  • shell中的段落注释

    摘自: 感叹号可以用任意的串和字符替代,比如 注意!和BLOCK之前不能有空格,但是可以用Tab Original: https://www.cnblogs.com/LiuYanY…

    Linux 2023年5月28日
    086
  • HTS恢复检查脚本

    #!/bin/bash #program:HTS-A数据库和插件检查 #author:sundz #version 20220531 v1 创建脚本 生成sql的表和字段汇总;ab…

    Linux 2023年6月7日
    0102
  • Docker镜像安全的一些(初级)检测方法

    一些使用过的工具记录。 docker scan工具 这个是docker官方工具,参考文档:https://docs.docker.com/engine/scan/ 使用方法: 命令…

    Linux 2023年6月6日
    089
  • 复习刷题7.23-Java开发

    基本上是每天学一点点 在复习的同时,发现好多之前没学过的,底层基础是真的重要(主要是算法不行(x))。开始狂补了要。 书:图解http,Java编程思想,疯狂Java讲义,计算机网…

    Linux 2023年6月7日
    070
  • Rook搭建Ceph

    Rook搭建Ceph 一、软件版本及先决条件 软件版本: 软件版本名称 软件版本号 Pacific 16.2.7 Rook V1.9 先决条件: K8s集群,1.16版本+ K8s…

    Linux 2023年6月13日
    083
  • 惊了!修仙=编程??

    大家好,我是良许。 在我记忆中,我们接触到的所有编程书籍都是这样的: [En] As far as I can remember, all the programming book…

    Linux 2023年5月27日
    089
  • Linux显示IP和主机名

    (1) ifconfig:Linux ifconfig命令用于显示或设置网络设备。 语法: ifconfig [网络设备][down up -allmulti -arp -prom…

    Linux 2023年6月8日
    0108
  • JMeter压测出现“the target server failed to respond“的解决办法

    压测接口的时候,遇到了这个问题,在网上找到解决方案,试一下还挺管用,800并发没改前20%以上的报错率,改完800并发0.00%报错率。 感谢曲健老师的分享 解决方案如下: 修改执…

    Linux 2023年6月8日
    085
  • CenterOS对防火墙和端口号的操作

    1 防火墙设置 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fir…

    Linux 2023年6月7日
    093
  • date 参数(option)-d

    记录这篇博客的原因是:鸟哥的linux教程中,关于date命令的部分缺少-d这个参数的介绍,并且12章中的shell编写部分有用到-d参数 date 参数(option)-d与&#…

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