2022年是我正式参加工作的第10个年头,也是我在CSDN上写博客的第11个年头。在这10余年的时间里,虽然在工作上遇到了各种情况,但我一直坚持输出、坚持分享,一共在CSDN上发表了530多篇原创博文。在这些文章中,大部分都是与技术、软件开发相关的,很多文章中都包含了具体的程序代码。
在2022年初的时候,我就立了一个flag:将过去10年里在CSDN博客上发表的文章归类整理,并对主要的程序代码进行重构,以此纪念自己的10年工作。从2022年1月开始,到6月结束,花了将近半年的时间,我圆满完成了这个flag。在这篇文章中,我来回顾一下自己的代码重构之路,也算是对过去的2022年的一个总结。

确定代码重构范围
既然要对代码进行重构,那么首先就要确定具体是哪些代码需要重构。积累10年下来,我的博客的分类比较多,既有软件开发类的,也有技术经验分享类的,还有读书总结类的。我花了将近一个月的时间,从500多篇博文中选出了包含程序代码的文章,并最终确定了需要进行重构的程序代码。我确定重构代码的依据是这些程序代码要有参考性和实用性,大家拿过去就可以应用到具体的项目中。
经过多轮挑选,最终入选我的重构清单的代码所在的博文标题如下:

shell脚本中的文件操作
Windows下C程序中唯一序列号的生成
Linux下vi替换字符命令操作实例
C语言中结构体参数变量的传递
Linux下的目录创建命令使用实践
Linux下将数据库脚本文件从sh格式变为sql格式
Linux下的目录扫描操作函数使用实践
Linux下的删除过期文件操作
寻找满足后缀要求的第一个文件名及其类型的C程序实现
Windows下修改文件后缀的C语言实现
Linux下生成随机密码的C代码实现
Windows下一个简单的日志系统的C代码实现
C语言中结构体变量之间赋值
Linux下写文件头的算法流程及C代码实现
Windows下对密码进行加解密的C代码示例
判断输入年份是否为闰年的另一种方法
Linux下水仙花数&素数&质因数分解的C语言实现
Linux下程序休眠问题的C代码实现
Linux下配置文件读取操作流程及其C代码实现
Linux下互斥量加锁与解锁操作的C代码实现
Linux下获取代码文件名、代码所在行数及日期时间的C程序实现
Linux下获取当前时间到1970年之前某年份的秒数的C代码实现
Linux下一个简单的日志系统的设计及其C代码实现
Linux下合并字符串中连续的多个空格的C代码实现
Linux下分批读取文件中数据的程序流程及其C代码实现
Linux下socket消息流程介绍及其C代码实现
Linux下时间范围判断的程序流程及其C代码实现
Linux下合并前缀相同的文件的程序流程及其C代码实现
Linux下按照时间和大小生成新文件的程序流程及其C代码实现
Linux下两种删除过期文件的方法详述
Windows下写文件时字段对齐和填充的C代码实现
用gdb分析core文件及常见gdb命令操作示例
“多线程”简介及其C代码实现框架
C语言多线程中变量累加问题的分析
查找栈的增长方向的分析及C代码实现
Linux下去除源文件中的重复行的程序流程及其C代码实现
Linux下在主机上实现对备机上目录及文件的操作的C代码实现
Linux下控制(统计)文件的生成的C代码实现
Linux下静态库和动态库简介及生成过程示例
Linux下将前缀和后缀相同的文件移动到同一个目录的算法设计及C代码实现
Linux下将源目录中的文件按照前缀分发到不同目录中的算法设计及C代码实现
结构体中指针赋值问题的分析及C代码示例
Linux下入队列和出队列操作的C代码示例
文件剪切的shell脚本实现
Linux下限制程序中某类操作的执行次数的算法设计及C代码实现
Linux下动态内存分配的C代码示例
C语言代码评审小结
用shell脚本合并多个文件内容
Linux下程序启动之后的初始化—检查配置文件及读取日志配置项的值

确定代码重构(编程)规范
军事上称“兵马未动,粮草先行”,对应到软件开发上就是“代码未写,规范先行”。只有先把编程规范定出来,大家才会有一个编写程序的标准,后面每个人写出来的程序才会有一个统一的风格,这样也方便软件的后期维护。由于我长期从事Linux下的C语言开发,因此基于这些经验,我确定的代码重构(编程)规范主要如下:
1、总体规则
1)代码文件名、函数名、结构体名、变量名、宏定义等统一采用unix代码编写风格。
2)代码中重要变量、关键流程及函数头部必须要有注释,变量在定义的同时要进行初始化。
3)代码中尽量不要出现不常用的缩写。
4)每个函数的参数个数不能超过5个。
5)代码中使用到的常量均使用大写来定义。
6)代码的注释量要达到总体代码量的30%以上。
2、代码规范示例

1)变量名

int    msg_type = 0;
char   request_type[10] = {0};
char  *msg_buf = NULL;
int     g_file_no = 0;   // 全局变量
static  int  s_loop_flag = 0;  // 静态变量

2)代码文件名

new_file_create.c
exp_file_del.c
config_file_read.h

3)结构体名

typedef struct
{int src_addr;    // 源地址int dst_addr;    // 目标地址char src_port;   // 源端口char dst_port;   // 目标端口
} t_addr_info;
t_addr_info  addr_info;
t_addr_info  *addr_info_new;

4)枚举名

typedef enum
{LEFT_BLANK = 1,RIGHT_BLANK,LEFT_ZERO,RIGHT_ZERO
} e_oper;

5)函数名

int send_request_msg();
char deal_response_msg(int msg_type, char *msg_content);

6)宏定义

#define  MAX_CONTENT_LEN     256
#define  MAX_BUF_LEN         50
#define  LOCK_TIME_OUT       5000

7)文件注释

/*********************************************************
* 文件名称: lock_and_unlock.c
* 文件标识: 无
* 内容摘要: 加锁与解锁
* 其它说明: 无
* 当前版本: V1.0
* 作   者: 周兆熊
* 完成日期: 20220507
**********************************************************/

8)函数注释

/************************************************************  * 功能描述: 互斥量加锁  * 输入参数: 无 * 输出参数: 无 * 返 回 值: 0-成功, -1-失败  * 其它说明: 无   * 修改日期          版本号          修改人         修改内容  * -------------------------------------------------------- * 20220507         V1.0       Zhou Zhaoxiong     创建  ************************************************************/

9)if/for/while/switch等语句

// if语句
if (条件)
{执行语句;
}
else if (条件2)
{执行语句2;
}
else
{执行语句3;
}// while语句
while (条件)
{执行语句;
}// for语句
for (i=0; i<X; i++)
{执行语句;
}// switch语句
switch (条件)
{case CMD_READ_RSP:{read_rsp_cmd(attr_cmd);break;}case CMD_DEFAULT_RSP:{default_rsp_cmd(attr_cmd);break;}default:{// break;}
}

代码重构及验证
从3月初开始,我正式启动了对代码的重构工作。由于之前的代码风格不统一,因此所谓的重构代码,可以说是重新写代码。具体的代码编写过程,我不再细说,相信有过代码编写或重构经验的朋友都会有所体会,这里分享下我个人的几个编程经验:
1、代码编写工具的选择
由于我在工作中用Linux的时间比较多,因此习惯了用VIM工具进行代码编写。虽然VIM比不上Windows下的代码编写工具(如source insight)那样操作便捷、界面美观,但仍然是Linux开发者的首选代码编辑器。通过安装一些插件或做一些设置,VIM可以达到近似source insight软件的效果。我的VIM编辑界面如下:

2、编译方式的选择
由于是基于Linux系统的C语言编程,那么代码编译工具就是gcc或g++。在之前的博文中,我还编写了makefile文件进行代码的编译。此次代码重构时,我直接使用了gcc命令进行编译,主要的考虑是我的代码量不大且代码文件不多,没有必要单独编写makefile文件,这样也可以加快我的代码重构进度。
为了方便代码的编译和持续优化,我将编译命令以注释的方式放到了代码文件中,需要使用的时候直接copy就行。

3、代码及时编译、及时修改优化
由于是代码重构,因此重构前整体功能基本是没问题的。如果代码重构完成之后编译不过或功能异常,那么大概率是重构过程中代码编写错误或逻辑理解错误造成的。所以,为了及时发现代码重构过程中的问题,我一般是每重构完一个函数就编译一次并简单测试一下,有问题就解问题,没问题就继续重构下一个函数。这样也避免了问题的累积,提高了工作的效率。


代码整理归档
经过了3个多月的“奋战”,到了6月初的时候,我达成了预定的计划,完成了40余个主题(对应每一篇博文)代码的重构,并全部测试验证通过。看着这一行行凝聚了自己心血的代码,我不禁感叹:写好代码确实太不容易了!
由于每篇博文的标题比较长,不够精炼,因此在将重构代码整理归档的时候,我对每个主题的标题均进行了简化,只展现最核心的内容,方便后期查阅。

同时,为了防止本地代码被误删或丢失,我又将重构之后的代码备份了一份到百度网盘上。对于程序员来说,代码备份工作是不可缺少的。

结束语
通过本次代码重构,我不仅进一步提升了自己的编程能力,而且对代码编写有了新的认识。在以前,我会觉得只要程序功能正常、代码编写得规范就可以了,但是在代码重构的过程中,我发现如果要深究,代码永远都有优化的空间和改进的余地。也就是说,我们不要满足于自身已有的技能,在温故而知新的同时,也要加强新技术、新思维的学习,这样才能够跟上技术前进的脚步。
回望过去的2022年,有太多的困难,但庆幸的是自己还是一路平平安安地走过来了。在2023年,我希望用自己的力量为家人带来幸福、为同事带来帮助、为公司带来价值。最为重要的是,希望在2023年里,自己能够一切顺利,平安健康!
如果有朋友对我重构的代码感兴趣,可以私信与我沟通。最后,祝大家在新的一年里身体健康、工作顺利、幸福安康!也祝CSDN越办越好!

代码重构之路 --我的2022年总结相关推荐

  1. #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else

    1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性.可维护性造成很大伤害,对于阅读代码 ...

  2. #华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源

    1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...

  3. #华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的

    [摘要]最近公司在大力提倡clean code, 而clean code 不仅是新写的代码要做,老旧的代码也要适当重构,精简我们的代码,毕竟代码还是要给人看的. 个人比较喜欢重构,当然,手术级的重构没 ...

  4. eplices如何导入外部代码_#华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源...

    1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...

  5. #华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势

    1.问题 在浏览项目时,发现一段使用正则表达式的代码 这段代码,在循环里执行了Pattern.matches()方法进行正则匹配判断. 查看matches方法的源码,可以看到 每调用一次matches ...

  6. CSS代码重构与优化之路(转)

    CSS代码重构与优化之路 阅读目录 CSS代码重构的目的 CSS代码重构的基本方法 CSS方法论 我自己总结的方法 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如 ...

  7. CSS代码重构与优化之路

    写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多,如果没有及时对CSS代码进行维护,CSS代码不断会越来越多.CSS代码交错复杂,像一张庞大的蜘蛛网分布在网站的各个位置 ...

  8. 把三千行代码重构为15行

    2019独角兽企业重金招聘Python工程师标准>>> 如果你认为这是一个标题党,那么我真诚的恳请你耐心的把文章的第一部分读完,然后再下结论.如果你认为能够戳中您的G点,那么请随手点 ...

  9. Seata RPC 模块的重构之路

    作者 | 张乘辉 来源|阿里巴巴云原生公众号 RPC 模块是我最初研究 Seata 源码开始的地方,因此我对 Seata 的 RPC 模块有过一些深刻研究,在我研究了一番后,发现 RPC 模块中的代码 ...

最新文章

  1. 龙格-库塔法(runge-kutta)matlab代码及含义,龙格-库塔法(Runge-Kutta)matlab代码及含义...
  2. ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
  3. 老师傅告诉你,学校学的编程知识,和工作所需要的差别有多大!
  4. 注解形式控制器配置(2)
  5. Java Kafka 简单示例
  6. POJ NOI MATH-7649 我家的门牌号
  7. pytorch张量_PyTorch张量-详细概述
  8. 三万字整理深度匹配模型
  9. Jsp 中遇到待解决问题
  10. 【博客管理】博客格式说明【置顶】
  11. log4cxx OutputDebugString DebugView dbgview
  12. 计算机信息管理企业资源规划综合实训,企业资源规划(ERP)综合实训细则
  13. Origin_8.0_crack(origin8.0序列号(origin8.0破解补丁))
  14. 应用计算机测线性电阻伏安特性曲线,线性电阻的伏安特性曲线总结分析.docx
  15. Apache CarbonData学习资料汇总
  16. 基于华为云服务的人脸识别功能实现
  17. Latex 操作(3) beamer(PPT)
  18. 15.2. switchport trunk encapsulation dot1q 提示 invaild input at^marker.
  19. 用flex做的3D坦克游戏
  20. ‘C:\Users\Administrator\Desktop\gitSpace\dj-2\dj\vue-manager-dj\node_modules\node-sass\vendor‘

热门文章

  1. 几何-九种二次曲面类型
  2. 转-观察模式 猫叫鼠跑人醒
  3. OpenStack Networking网络
  4. 名编辑电子杂志大师教程 | 制作好的电子杂志如何输出以及发布?
  5. 3 Symmetry Group
  6. synopsys破解教程具体操作
  7. 爱奇艺 2021秋招在线笔试
  8. 单实例oracle ha,单实例和RAC打造的OracleStream
  9. Edge 按 Backspace键 实现返回上一页 过程
  10. Microchip PIC24F dsPIC33E flash 自擦写的尿性小结