扫描关注一起学嵌入式,一起学习,一起成长
1.代码是需求逻辑的一种展现形式
业务需求示例
我们要做一件事情doSomething:
第一步先做A,A过程要先执行a1,然后执行a2,然后执行a3这三个子过程。 第二步再做B,B过程需要执行b1,然后b2这两个子过程。
正确的代码实现
正确的代码结构应该是和逻辑映射的,代码结构如下:
2.代码块+合理注释
void doSomething()
{
//A
a1逻辑伪代码.....;//a1
a2逻辑伪代码.....;//a2
a3逻辑伪代码.....;//a3
//B
b1逻辑伪代码;//b1
b2逻辑伪代码;//b2
}
3.抽取小函数
void doSomething()
{
doA();
doB();
}
void doA()
{
a1逻辑伪代码.....;
a2逻辑伪代码.....;
a3逻辑伪代码.....;
}
void doB()
{
b1逻辑伪代码;
b2逻辑伪代码;
}
不正确的代码实现
第一种问题:不对等
void doSomething()
{
a1逻辑伪代码.....;
a2逻辑伪代码.....;
a3逻辑伪代码.....;
doB();
}
void doB()
{
b1逻辑伪代码;
b2逻辑伪代码;
}
doB();
之前加空行,并对a1,a2,a3加个注释,也会易读很多(当然这是一种妥协写法)。void doSomething()
{
//a逻辑
a1逻辑伪代码.....;
a2逻辑伪代码.....;
a3逻辑伪代码.....;
//b逻辑
doB();
}
void doB()
{
b1逻辑伪代码;
b2逻辑伪代码;
}
第二种问题:部分抽取
比如电脑是一个整体,可以命名是电脑;如果只给你一部分(CPU,主板,显卡)怎么命名让人能明白?电脑部分零件?但电脑部分零件并不能让人明白,因为它不是一个逻辑主体。
void doSomething()
{
doA();
a3逻辑伪代码.....;
doB();
}
void doA()
{
a1逻辑伪代码.....;
a2逻辑伪代码.....;
}
void doB()
{
b1逻辑伪代码;
b2逻辑伪代码;
}
第三种问题:抽取错误
第三种是最严重的问题,抽取错误,和逻辑不匹配。
如下:把A的部分逻辑和B的部分逻辑一起抽取。
如果在这个基础上再对抽取的部分起个晦涩的名字(其实这种抽取也起不到好名字),然后应用一些设计模式来把代码更分散(缺点隐藏起来),就成功的完成了只有自己可以看懂的代码(可能表面看起来还很高大上)。
小函数抽取和设计模式不一定能解决问题,也能隐藏问题。
补丁和模式思考
补丁代码思考,代码的腐烂
很多人看到这里,会觉得自己绝对不会写出这么烂的代码;确实一开始也许不会,但伴随新需求,不同人不断打补丁(为了不影响线上,老代码不让动),最后就会演进为这几个问题综合展现的代码。
写出一个好的基础代码的过程:
文章来源于网络,版权归原作者所有,如有侵权,请联系删除。
关注【一起学嵌入式】,回复“加群”进技术交流群。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!