最近在新公司负责bug的修复,发现很多的代码逻辑理解起来有些困难。现在将其中观察到的现象列出来,谈谈自己的看法。

1.类过大

对于代码来说,我们在编写的时候最好做到SRP(Single Responsibility Principle)。但是实际的项目由于经过了不同的开发人员,以及工期比较紧张的原因,所以这一原则被遵守的不是很好。经常看到一个函数100多行,可能我遇到的还算好的了,这个问题不是最大的。

修改建议:一个函数最好控制在30--50行左右

2.同样的一种情况,用多个变量表示

比如说对于视频格式,HLS(m3u8)有时候叫hls,有时候叫m3u8,这个问题还好,然后一个bool的变量代表hls(hlsType_),一个代表m3u8(m3u8Type_).判断的时候有时候用hlsType_,有时候用m3u8Type_,导致判断变量不明确。一个地方忘记修改,就非常容易出现bug。

修改建议:对于一个类型,只用一种标志,判断方式最好由函数导出而不是直接判断变量类型。

3.在函数的参数中,引入bool类型的控制变量

在函数中引入bool变量被成为逻辑耦合,这对于代码的理解是非常不好的。
具体的分析 https://coolshell.cn/articles/5444.html 。记得代码中有个函数是这样的

void Func(Client& client,bool dns,bool complete).

表示智商不好的我,问了好多次领导终弄明白了,就赶快加上了注释。
能猜出来dns和complete的含义和关系的同学,我向你们表示敬意。
修改建议:不在函数中写入bool变量。

4.数据传输和业务逻辑未分离

对于网络编程来说,主要涉及到两个部分。1.socket IO和2.协议解析 其实这两个部分是正交的,举个例子说明一下。

比如 “乾隆” 让 “和大人” 到宫里商量事情,用的是两个人只懂的暗号,这就是协议。
这个消息怎么让“和大人”知道就是socket IO。
比如协议可以选择 1.满文 2.汉文 或者 3.诗词中的一些话。
传输方式可以选择 1.口谕 2.圣旨 3.信鸽 。
可以形成一个组合型的矩阵。

协议 满文 汉文
口谕 满文口谕 汉文口谕
信鸽 信鸽带满文纸条 信鸽带汉文纸条

这样的设计在扩充协议或者传输方式的时候都非常的容易,而且每个部分各司其职,非常容易理解。

修改建议:将协议解析和数据传输分开,容易理解。

5.减少类的成员变量,相关变量合并和注释

在很多的代码规范中,会提到尽量少用或者不用全局变量,对于类来说,就是尽量减少类的成员变量,能用局部变量或者函数参数的方式表示的,尽量不要选择用成员变量来表示。在对于需要一些计算结果的情况下,要做到不要边接受数据,边计算中间结果。因为如果要对最后的结果进行修正的话,中间结果也需要修正,会增加程序的修改位置和难度。

修改建议:只保留数据的原始结果,在最后的步骤中计算最后的结果。

类的成员变量==类函数的全局变量

转载于:https://www.cnblogs.com/Dennis-mi/p/8410655.html

关于写代码的几个看法相关推荐

  1. 新华三发布H3C Workspace数字工作空间:只需一张屏,程序员也能随时随地在云上写代码

    随着数字时代的不断发展,工作模式经历了面对面的"纸+笔"模式.办公室场景下的"PC+电脑"模式.以及远程办公场景下的"手机+协同软件"模式, ...

  2. 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

    作者 |  James Vincent等 编译 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:在过去的一年中,AI 生成书面文字的能力大大提高.通过扫描庞大的文本数据集,机器学 ...

  3. CTO集体怒吼:我到底要不要继续写代码(下篇)

    http://www.devstore.cn/new/newInfo/4708.html 5.在人人创业的时代里,竞争压力非常大.有很多产品,甚至会有多个竞争对手,那么产品技术和布局会非常重要.CTO ...

  4. 35岁之后,你还会继续写代码吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 前段时间,阿里CEO张勇,发表了一个论调,引起多方关注, ...

  5. 架构师究竟要不要写代码?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! Talk is cheap, show me the c ...

  6. 程序员在网吧写代码被暴打一顿!

    近期在网上看到一个新闻,程序员在网吧写代码被人暴打一顿! 事情是这样子的,那位程序员家里电脑坏了,又有一个很急的项目要赶,就在小区楼下的网吧去写代码!由于时间很急,项目有很大,程序员的思路必须非常清晰 ...

  7. java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?

    前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...

  8. Java 8 到 Java 14,改变了哪些你写代码的方式?

    前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...

  9. 写代码也有“套路”-谈谈设计模式

    编程教室开了这么久,已经有很多人从完全零基础的小白成为了会写代码的菜鸟程序员,能够自己独立开发程序.不过到此阶段,常常会遇到瓶颈,感觉功能可以实现,但代码看起来有些别扭: 代码中有很多相似的重复代码 ...

最新文章

  1. ecilpse连接oracle ojdbc驱动
  2. 关于mysql中truncate
  3. leetcode -day19 Convert Sorted List to Binary Search Tree
  4. 深入Java集合学习系列:ArrayList的实现原理
  5. 笔记本电脑打开后不显示桌面_宝骏630打开空调开关后压缩机不工作 - 汽车空调...
  6. java多态的理解(运行时多态)_Java多态的理解
  7. 分针网——每日推荐:PHTML解析原理
  8. 【操作系统】—中断和异常
  9. 《从零开始学Swift》学习笔记(Day 39)——构造函数重载
  10. Ripple 20:严重漏洞影响全球数十亿IoT设备,复杂软件供应链使修复难上加难
  11. http协议详解(超经典)
  12. 计算机自动设置开机,怎么设置电脑自动开机
  13. CMT 注册——Google Scholar Id,Semantic Scholar Id,和 DBLP Id
  14. 2018年度获取工作日节假日API
  15. 如何将图片的背景色去掉?怎样快速去除背景色?
  16. 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(二) Logstash简介及常见配置语法
  17. epub格式电子书剖析之三:NC…
  18. java日期计算_java日期计算
  19. java.util.logging log4j,Java核心代碼(十)日志log4j,java.util.logging,commons-logging
  20. java GUL编程

热门文章

  1. 今日 Paper | 协作蒸馏;人脸反欺骗;人脸表示;3D-CariGAN等
  2. SAP MM 明明有维护源清单,还是不能下PO?
  3. 人工智能应用中有这八大不可轻忽的弱点
  4. MachineLN博客目录
  5. 9位AI教授总结2017年:技术变得平民化,但商业竞争在不断升级
  6. 免费教材丨第48期:业界大牛中文教学视频《深度学习:进阶》第25-28讲
  7. matplotlib如何把坐标轴一横一竖给绘制出来
  8. 李飞飞AI100报告第二弹,提出14大AI机遇与挑战,82页pdf
  9. 与微信、APP正面刚?三大运营商联合发布5G消息白皮书
  10. 5G将如何推动未来十年智能城市的发展