惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

O
OpenAI News
I
Intezer
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
S
Securelist
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
P
Palo Alto Networks Blog
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
T
Threatpost
Latest news
Latest news
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
罗磊的独立博客
云风的 BLOG
云风的 BLOG
L
LangChain Blog
博客园 - 【当耐特】
P
Privacy International News Feed
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
量子位
Security Archives - TechRepublic
Security Archives - TechRepublic
爱范儿
爱范儿
S
Security @ Cisco Blogs
Martin Fowler
Martin Fowler
博客园_首页
SecWiki News
SecWiki News
Spread Privacy
Spread Privacy
I
InfoQ
博客园 - 司徒正美
T
Tor Project blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Help Net Security
L
LINUX DO - 最新话题
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
Y
Y Combinator Blog
D
DataBreaches.Net
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
M
MIT News - Artificial intelligence
Recorded Future
Recorded Future
博客园 - 叶小钗

浮生笔记

时机的重要性 回答dayu博客的几个问题 学会做选择 我理想的城市 如何选择一个适合的城市 马来西亚游记 回首2023,展望2024 从ChatGPT聊起 菲律宾旅游攻略笔记 深圳游记 香港游记 怎样赚钱----我理解的商业模式 用户界面与跨平台 使用telnet通过IMAP协议读取QQ邮箱 信息成本-----从ChatGPT到情报学 买断制到订阅制----兼谈消费频次 我眼中的CSDN 迁移博客内容到静态博客 Hugo使用Jane主题支持搜索实现 C语言和Lua的相互调用示例代码 从放逐之城看经济学 不同产业的分析 回首2021,展望2022 游戏中的经济学 Windows获取网络地址、子网掩码等 -fsanitize=address 参数作用 C++ 编译器支持标准判断 C++ 编译器支持标准判断 VS Code的golang开发配置 之 代码提示 二叉树遍历的非递归算法的实现 我的Chrome插件 golang 获取get参数 golang编程之我见 Linux 网络编程之 Select 构建之法读书笔记 (1) 友情链接 Effective Morden C++ 读书笔记(3) 二进制协议 vs 文本协议 从重构到重写 asio制作使用ssl通信的证书 gdb 7.11 Linux 获取网卡信息 《构建之法》读后感 由买冰箱想到的 2014年年终总结 聊聊我对写好程序的认识 编程技巧之表格驱动编程 经验搜索排名---google已经做过类似的了(我想多了) 有关编程语言的认识
关于写代码的几个看法
DennisThink · 2018-02-03 · via 浮生笔记

文章目录

最近在新公司负责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.减少类的成员变量,相关变量合并和注释

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

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

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

文章作者 DennisThink

上次更新 2018-02-03

许可协议 CC BY-NC-ND 4.0