善用SourceMonitor+Astyle,让代码维护者不再骂娘

简介: 1. 什么样的代码让你想骂娘?什么样的代码最想让你骂娘,是这样的,代码层层嵌套或者是这样的密密麻麻,舍不得多一行免费空格又或者是那种又臭又长的代码呢?代码除了用来运行外,还有很重要的就是阅读,给自己阅读,或者给他人阅读,如果几个月后你自己都看不下去自己以前写的代码,呵呵…2. 我们需要漂亮的代码爱美之心,人皆有之。漂亮的代码,也是我们程序猿的追

1. 什么样的代码让你想骂娘?

什么样的代码最想让你骂娘,是这样的,代码层层嵌套

是这样的?

或者是这样的密密麻麻,舍不得多一行免费空格

这里写图片描述

又或者是那种又臭又长的代码呢?

代码除了用来运行外,还有很重要的就是阅读,给自己阅读,或者给他人阅读,如果几个月后你自己都看不下去自己以前写的代码,呵呵…

2. 我们需要漂亮的代码

爱美之心,人皆有之。漂亮的代码,也是我们程序猿的追求,它不仅能够完成要求的功能,而且还要整齐,有条理,易于理解。

漂亮的代码能够增强可读性,同时也减弱了出错的概率。最关键的一点,漂亮的代码不会被骂娘。

具体来说,漂亮的代码通常:
1. 代码缩进
2. 分支语句嵌套的层数较少
3. 每个函数的代码行数不会太多
4. 变量的命名有统一的风格
5. 文件命名有统一的风格
6. 注释有统一的风格

如此等等,这些都是实践中总结出来的结晶。也许你也注意到了,这些东西不就是编程规范吗?确实是如此。为了写出漂亮的代码,很多公司都会有自己的编程规范。
某些公司,还会对编程规范进行考试,足见其重视程度。

3. 善用佳软,助力代码变身

3.1 AStyle :一键代码格式化

作为一个狂放不羁的男子,我写代码从来不回头,怎么可能管你什么代码风格。尤其个人偏爱Linux,代码风格也是Linux的。对于一些非Linux代码风格的项目来说,在写完代码后,难道让我对着编程规范将函数内的大括号一个一个单独一行?
这里写图片描述

我需要一键格式化,就让我的代码风格由Linux变成GNU风格,变成JAVA风格。在我不高兴的时候,还能瞬间变回来。

我需要的就是 AStyle –支持”魔法换肤”,一键变换代码风格,堪称编码界的美图秀秀。

AStyle(Artistic style),可以集成到Eclipse,VS,SourceInsight等工具中,对代码进行格式化、规范风格。AStyle默认支持Linux,ANSI,GNU,JAVA等风格,也支持自定义风格。
当不同编码风格的程序员为一个项目共同贡献代码时,特别项目周期紧张时期,经常会出现各式各样的代码导致极低的可读性和可维护性。这个时候AStyle就能很好的解决这个问题。
对于我这样的懒人来说,不用去管代码缩进,将精力花在更重要的地方,就是一种减负。

3.2 SourceMonitor:识别坏味道

解决了代码风格后,是否就可以算做漂亮的代码了呢?
要知道再漂亮的衣服穿到胖子身上,也漂亮不到哪去(阿门,原谅我吧)。对于代码来说,符合代码风格只是第一步,漂亮的代码还要易于理解。让人容易理解的话,单个函数的代码行就不能太长,嵌套层数就不能太多,分支条件判断不能太多。这些工作不是代码风格能解决的。我们需要能够自动检查代码质量的工具-SourceMonitor。

SourceMonitor是一款代码质量检查的软件。能够检查文件中函数的个数,每个函数的代码行数,注释比例,函数的调用深度,圈复杂度等。
其中需要最关键的是每个函数圈复杂度和每个函数的代码行数。圈复杂度是指函数中可独立执行的路径,因此函数中每出现一次if/else/while,switch/case/break等,圈复杂度就加1.圈复杂度越高,说明函数中可执行的路径越多,也就越复杂。超过一定值如(15或者10)以后就要考虑能否将函数重构了。此外一个函数的代码行数如果太长,不能一屏显示的话,不容易让人记住和理解,也需要对该函数进行提炼。

3.3 Eclipse的半自动重构

利用SourceMonitor找出需要重构或提炼的函数后,难道又要我手工重构吗,有没有重构的工具呢?全自动的目前还没见过,如果有同学见到,请留言。相比来说,半自动的重构工具还是比较多的,Eclipse中就有一个重构菜单,提供函数提炼,变量或方法重命名等不少基础的重构功能。
Eclipse的半自动的重构能减少人工重构的错误,降低开发人员所耗费的精力,这也是为什么一个我作为C/C++程序员越来越喜欢Eclipse的原因。

回到最开始的话题中,我觉得想骂娘的代码无非有两种,一种是难用,一种是难看。

代码难用,这个问题比较深奥,本文没有讨论。
代码难看,可以通过格式化使程序变得美观,通过SourceMonitor识别代码中的坏味道,利用Eclipse半自动重构等方式使程序变得已读。
我相信,通过这样处理后的代码至少看上去是不会再被骂了。

相关文章
|
6月前
|
人工智能 自然语言处理 前端开发
【2025.3.08更新】wordpress AI智能插件|自动生成SEO文章/图片/视频+长尾词优化 内置DeepSeek多模型支持与API扩展
Linkreate WordPress AI插件提供强大的自动化文章生成、SEO优化、关键词管理和内容采集功能。它能根据关键词自动生成高质量文章,支持多语言和批量生成,内置长尾关键词生成工具,并可定时自动发布文章。插件还集成了多种AI服务,支持前端AI客服窗口及媒体生成,帮助用户高效管理网站内容,提升SEO效果。
【2025.3.08更新】wordpress AI智能插件|自动生成SEO文章/图片/视频+长尾词优化 内置DeepSeek多模型支持与API扩展
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
供应链 监控 数据挖掘
史上最全!80个数字化工厂常见术语合集,看完秒懂~
据我了解,这些术语甚至连一些从事相关行业的朋友都不太熟悉。因此,这也算是给大家做一个全面的术语科普了,其中也总结了一些行业通俗名称与大家分享。我相信,无论是在从事“数字工厂”行业的朋友,还是正在求职的朋友,都会从中受益。
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
23575 64
图解一致性哈希算法,看这一篇就够了!
|
关系型数据库 MySQL 数据库
2022最新mysql安装与配置教程(简单易懂,图文解释)
2022最新mysql安装与配置教程(简单易懂,图文解释)
801 0
2022最新mysql安装与配置教程(简单易懂,图文解释)
|
JSON fastjson 数据格式
利用过滤器简单粗暴的解决FastJson转JSON后字段存在null的问题
如果使用下面fastjson内置的几种策略,通过名字大家基本上知道它们的作用,这种不会过滤掉日期字段的null
691 0
|
存储 安全 前端开发
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案(下)
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案
|
XML Java 数据库
IDEA中如何使用debug调试项目 一步一步详细教程
IDEA中如何使用debug调试项目 一步一步详细教程
918 0
|
网络协议
使用ipv6-test.com测试服务器域名是否支持IPV6
使用ipv6-test.com测试服务器域名是否支持IPV6
526 0
Qt自定义sleep延时函数
Qt自定义sleep延时函数
971 0