如何写优雅的代码
好代码和坏代码
无论从写代码的年限或能力来说,我资历并不深。我也没有能力去说教别人。但是,对于代码的好坏,我们应该有一个清晰的标准(对自己的标准)。我在项目中,曾经被我的室友吐槽,代码写的像一坨屎!我当时很不屑,还和室友对骂一通。不过好在经过时间的洗礼,回头看看自己曾经写的代码,还真特么写的太丑陋了,到处都是不好征兆。到处散发着代码的坏味道;
比如说:
- 命名不规范
- 过长函数
- 过长的参数列
- 重复的代码
- 数据泥团
详见 Martin Fowler 的重构
如何写好代码
首先,对自己有一些严格的标准和要求。例如:
- 代码是写给自己和别人看的:对于同一个功能实现有很多种方法,不管怎么写代码,代码最终都会编译成二进制,程序都会正常运行;但是有一点我们应该时刻记着。代码应该保持清晰的结构,这样对于后期的维护代码很大的便捷性。假如有一天回头要修改代码,别人和你都感谢你!
- 建立良好的编码命名规范:有人可能说,我们公司小,我们不需要规范;我们项目小,时间太赶我们不需要规范。但是请你记着,那样的代码就像定时炸弹,以后的维护成本会很高。我想说,放下借口,每个人都应该有一套自己的编码规范或者团队的编码规范。这样对你的程序之路会越走越好!
- 学会不间断的重构:重构一种提高代码水平捷径。可以参考Martin Fowler 的《重构-改善既有代码的设计》这本书。
C#编码规范
我是一个.net开发者。所以就说说C#编程的命名规范;一般都采取骆驼命名法。
例如:myData是一个它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼。
- 命名空间:[公司名].[模块名] 如:iHealthwoo.Resource这样的命名方式;
- 类名:MyClass 取每个单词首字母大写;
- 方法名:动词+名词。如GetName() 采取首字母大写;
- 私有变量:_myClassName 是一个下滑线+骆驼命名法;
- 方法参数名:采取首字母小写。GetUser(string userId);
- 方法内变量:如mUserId。m+骆驼命名法,表示方法内变量,其中(m=>取自于Method中的m);
- 常量名: [操作名]_[状态]_[消息提示信息]; 如SUBMIT_FAIL_MSG代表提交失败消息;
- 枚举命名:[枚举][Enum];如:StatusEnum,一看就知道就状态枚举.甚者更细化一点PrintStatusEnum指的是打印状态枚举;
- 委托命名:[委托名][Delegate],如:SubmitUserDataDelegate,表示提交用户数据委托;
荐书