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

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半自动重构等方式使程序变得已读。
我相信,通过这样处理后的代码至少看上去是不会再被骂了。

时间: 2024-10-03 09:11:13

善用SourceMonitor+Astyle,让代码维护者不再骂娘的相关文章

SQL Server2005SQLCLR代码安全之权限

一. SQLCLR权限集级别 当你使用CREATE ASSEMBLY语句把一个程序集加载到一个数据库中时,SQL Server提供了三种权限集级别:SAFE,EXTERNAL_ACCESS和UNSAFE.这些权限集形成如图3和图5(均请参考第二篇)所示的AppDomain策略级别. 下面是一个典型的语句,它实现安装位于FileLoader.dll文件内的一个程序集,并且赋予它EXTERNAL_ACCESS权限集. CREATE ASSEMBLY FileAccess FROM 'E:\FileL

ASP.NET 2.0 中的代码隐藏和编译

asp.net|编译 代码隐藏 虽然该代码隐藏模型在 2.0 中是不同的,但是它的语法已经进行了少量更改.实际上,该更改十分细微,如果您不仔细查看,甚至都无法注意到它Figure 1 Syntax in ASP.NET 2.0 Default.aspx<%@ Page Language="C#" AutoEventWireup="true"     CodeFile="Default.aspx.cs" Inherits="Msdn

HTTP状态代码

参考:http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81 http://www.w3schools.com/cn/tags/ref_httpmessages.asp HTTP状态代码大全请参考完整的 HTTP 1.1规范说明书来自于RFC 2616,: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 1xx:信息 状态代码: 描述: 100 Continue 服务器

不要将时间浪费到编写完美代码上

[腾讯云]云上实验室:开发者零门槛,免费使用真机在线实验!>>> 一个系统的迭代开发可能持续运行5年至10年甚至是20年.相比之下,某行代码甚至某个设计的生命周期则要短很多,只有几个月或者几天,甚至当你为了解决一个问题迭代测试不同方案时它们的生命周期只有几分钟. 一些代码的确比其他代码更重要 通过研究代码随时间发生的变化,Michael Feathers发现了代码生命线.通常,每个系统都有许多一次写成不再修改的代码.但是,有一小部分代码,包括最重要最有用的代码,却被经常被修改,重构或者重

脉动旧代码今日起彻底停止运作

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 原定于1月15日停止的旧代码,为了保证广大会员的代码安全问题(旧程序代码存在重大漏洞),于1月9日提前终止投放.目前脉动服务器正在进行升级中,会员今后仍可查询旧系统数据,但旧广告代码将不再运行,请各位会员及时更新代码,以免耽误您的投放. 如果此广告适合您,那请登陆联盟官方地址:http://www.myad.cn 站长网联盟信息发布QQ群:5

JS组件Bootstrap Table表格多行拖拽效果实现代码_javascript技巧

前言:前天刚写了篇JS组件Bootstrap Table表格行拖拽效果,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.用了半天时间研究了下,效果是出来了,但是感觉不尽如人意.先把它分享出来,以后想到更好的办法再优化吧. 一.效果展示 1.拖动前 2.拖动中 3.拖动后 4.撤销回到拖动前状态 二.需求分析 通过上篇我们知道,如果要实现拖拽,必须要有一个可以拖拽的标签,或者叫容器,比如上篇里面的tr就是一个拖拽的容器,那么如果要实现选择行的拖拽,那么博主的第一反应是将选中的

程序员应该避免的 5 种代码注释

你有没有这样的经历:别人审查过你的代码之后给出的注释,你认为是没有必要的?注释代码是为了提高代码的可读性,目的是为了能让其他人更容易理解你的代码. 我特别讨厌这5种注释类型以及制造它们的程序员.希望你不是其中之一. 1.自以为很了不得的程序员 public class Program { static void Main(string[] args) { string message = "Hello World!"; // 07/24/2010 Bob Console.WriteLi

提升代码内外部质量的22条经验

本文主要关注代码的内部和外部质量,编程的价值观,代码质量的评估标准,整洁代码的匠艺以及如何维护已有的代码. 外部质量:用户所能感受到的部分,正确性,易用性,效率,可靠性. 内部质量(代码质量):可维护性,灵活性,可移植性,重用,可读性,可测试性,可理解性. 总结的22条经验如下: 代码分为外部质量和内部质量,好的产品不等于好的代码(Good Software != Quality Code). 产品的冰山效应:产品经理以及用户关注的部分只是冰山露在水面以上的部分,隐藏在下面的是看不见的更加庞大的

如何定位导致Crash的代码位置

1. 在开发环境下定位Crash错误 1.1 普通的crash 1.2 较难定位的crash 1.3 注意vc的输出日志 2. 定位发布在外的版本的Crash错误 3. 小技巧 3.1 根据程序地址找到代码位置 3.2 根据消息值查看对应的windows消息 3.3 查看GetLastError返回值 3.4 在代码中暂停程序 4. 编程小警示 4.1 慎用IsBadPtr系列函数 4.2 慎用catch(...) 5. 附录 5.1 为什么程序crash时调用堆栈是乱的 5.2 使用Debug