代码重构之路 --我的2022年总结

news2024/11/15 12:57:47

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越办越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文投稿指南——中文核心期刊推荐(能源与动力工程)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(八)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

gateway整合sentinel限流不生效排查

问题 线上的sentinel 在测试压测时候可以正常被限流 但是在正常的流量中 发现被限流的接口很少 &#xff08;我发誓肯定都配置了限流规则&#xff09; 约定 文中的 服务名称以及地址 都被改写了 排查步骤 1.检查相关配置 以及 pom依赖配置 发现SentinelGatewayFilter 重复…

[论文阅读] (26) 基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

【iOS】—— 内存的五大分区

内存的五大分区 文章目录内存的五大分区五大分区分别是1.栈区优点&#xff1a;2.堆区优点&#xff1a;3.常量区4.静态区5.代码区static、extern、const关键字比较1.static关键字static关键字作用&#xff1a;全局静态变量局部静态变量2.extern全局变量对内的全局变量外部全局变…

25.Isaac教程--Carter机器人

Carter机器人 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html Carter 是一个机器人平台&#xff0c;使用 Segway 的差分底座、用于 3D 范围扫描的 Velodyne P16、ZED 相机、IMU 和 Jetson TX2 作为系统的核心。 与定制安装支架一起&#xff0c;它…

WSL2 Ubuntu+gnome图形界面的安装血泪史(亲测有效)

WSL2 Ubuntugnome图形界面写在最前面&#xff08;血泪史&#xff09;1.wsl2 安装2.Ubuntu安装3.VcXsrv安装与启动4. gnome图形界面的配置5.显卡驱动的升级写在最前面&#xff08;血泪史&#xff09; 前因 近期遇到一个问题&#xff0c;需要在ubuntu虚拟机上用opengl3.3以上的版…

导航相关产品调研

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1、现有的业务产品2、常做的导航规控业务前言 认知有限&#xff0c;望大家多多包涵&#xff0c;有什么问题也希望能够与大家多…

“水果零售第二股”百果园上市首日市值近百亿

“水果零售第二股”来了&#xff01;今日&#xff08;1月16日&#xff09;&#xff0c;国内最大水果零售商深圳百果园实业&#xff08;集团&#xff09;股份有限公司&#xff08;下称“百果园”&#xff0c;02411.HK&#xff09;正式挂牌港交所。▲图源:百果园官网百果园此次IP…

8.框架Spring

一、基本概念 Spring 是 Java EE 编程领域的一款轻量级的开源框架&#xff0c;由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立&#xff0c;它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 导入依赖&#xff1a; <dependency><groupId>o…

操作系统(一)

操作系统&#xff08;一&#xff09; 1、什么是操作系统 操作系统是指控制和管理整个计算机系统的硬件与软件资源&#xff0c;合理的组织、调度计算机的工作与资源分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的系统软件…

Android 深入系统完全讲解(24)

https://blog.csdn.net/weixin_41101173/article/details/80374455 理解了绘制内容&#xff0c;解决了这部分&#xff0c;下来我们来说说关于音视频的其他部分。 所有的文件&#xff0c;都有一个叫做格式的东西存在&#xff0c;MP3&#xff0c;WAV&#xff0c;而处理这个格式的…

zookeeper集群安装

zookeeper集群安装 1. 安装环境介绍 下载地址&#xff1a; http://archive.apache.org/dist/zookeeper/ 安装版本&#xff1a; 3.7.0 安装包&#xff1a; apache-zookeeper-3.7.0-bin.tar.gz 安装目录&#xff1a; /opt 机器IP&#xff1a; 10.28.19.107 10.28.19.108 10…

字符矩阵内单词搜索

单词搜索 问题链接&#xff1a;word search&#xff01;&#xff01;&#xff01; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通…

【阅读笔记】c++ Primer Plus——第九章

内存模型和命名空间 单独编译 c程序分成三部分 第一部分&#xff1a;包含结构声明和使用这些结构的函数原型(头文件)第二部分&#xff1a;包含与结构有关的函数代码(源代码文件)第三部分&#xff1a;包含调用与结构相关的函数代码(源代码文件)头文件包含了用户定义类型的定义…

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(二)

第七章 实战项目提升&#xff0c;完善简历 19.OV7725摄像头实时采集送HDMI显示&#xff08;二&#xff09; 在正式介绍OV7725 CMOS Sensor视频采集前&#xff0c;首先需要去详细说明OV7725的寄存器配置接口&#xff0c;这里有OmniVision公司推出的官方手册 “OV7725_software_…

8个必须掌握的Blender拓扑技巧

组合 3D 模型的过程对后续过程影响很大 - 稍后编辑的难易程度、应用光照和着色器时的外观效果如何、动画时变形的难易程度等等。 一个好的模型对于 CG 管道的所有其他部分的良好运行至关重要。 另一方面&#xff0c;凌乱的拓扑结构会使流程的其余部分成为一场灾难。 你能做些…

IB地理科补习有用吗?

IB地理科的补习如何帮助学生改变学科的表现&#xff1f;这可以从几方面来做分析。 1. 训练 第一是训练。我们老师会按来补习的同学的个人需求、时间和个性&#xff0c;提供很多不同程度的训练&#xff0c;帮助他们建立一个正确的能力系统&#xff08;skill set&#xff09;去应…

二、预训练模型预测(Datawhale组队学习)

文章目录安装配置环境ImageNet预训练图像分类模型预测单张图像-英文载入预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测单张图像-中文预训练图像分类模型图像预处理执行图像分类预测预测结果分析ImageNet预训练图像分类模型预测视频…

汽车CAN总线硬件电路原理

根据ISO 11898的定义&#xff0c;物理层被细分成3 个子层&#xff0c;它们分别是物理信令&#xff08;位编码定时和同步&#xff09;、物理媒体连接&#xff08;驱动器和接收器特性&#xff09;和媒体相关接口&#xff08;总线连接器&#xff09;。物理信令子层和数据链路层之间…