代码规范、如何写出好代码

代码规范、如何写出好代码

作为一个程序员,肯定希望能写出一手好代码,看起来赏心悦目,又易于理解。既方便日后自己回来翻阅一眼就能明白代码在干什么,又能让接手的人很快上手,看到精妙的地方,不由自主地发出由衷的感叹,悄无声息地改变别人不好的习惯。

如何才能写出好代码呢?
在一次讲座上,我听了一位编程大神的看法,在这里分享给大家。

好的代码应该至少具备下面这6个特点:

  1. 使用空行来分割逻辑
  2. 使用注释和花括号
  3. 不用的代码和引用删除
  4. 不要用中文拼音做变量名
  5. 可用,清晰优雅,高效
  6. 多写代码,多思考

使用空行来分割逻辑

一般代码超过30行左右,我们就在考虑,要不要把这些代码封装到一个方法中去。但是即使把这一大段代码扔到一个方法中去,在主函数里调用这个方法,也不能保证以后不会修改这个方法了。所以为了自己和他人,还是有必要对比较长的代码做一些处理。

一般即使是一个方法里面的代码,逻辑也是可以分成一小块一小块的,这个时候我们在这些逻辑中间加上空行,就能告诉别人,我这个代码这里,两个空行中间的代码关联比较大。
在没有添加任何注释的情况下,因为有空行来分割逻辑,倒也不是一步就吓退想要看你代码的人。

使用注释和花括号

在软件开发的生命周期中,文档应该是一直伴随着的。这样,后面接手的人看文档就知道当时发生了什么。如果项目组有使用文档来规范开发,那就要去遵守这个规定。但是文档也有一个问题,就是代码修改之后就要去修改文档,万一文档没有更新,接手的人反而会受到误导。

文档是个好习惯,在坚持更新项目文档的同时,还要记得更新代码的注释,敲完代码后随手加上的简短的几个字,会提高看代码的效率好多倍。

当你焦头烂额的猜测原来编码的人是怎么想的时候,看到添加了注释的代码,是不是有一种谢天谢地的感觉。

花括号{}在代码中一般是有两种形式:

  • 一种是Visual Studio中C++源码编辑器默认的上下对齐式
int main()
{
    cout<<"我是C++"<<endl;
}
  • 一种是Eclipse中Java源码编辑器默认的左花括号末尾排放式
public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("我是Java");
    }
}

C++默认方式,更容易看清代码层次;Java默认方式减少占用的行数。

个人更加倾向于上下对齐式。但是个人意见需要服从团队约定。你所在的团队使用哪种方式,你就要使用哪种方式,和大家保持统一。

并且这两种默认方式在集成开发环境IDE中都是可以调节的。比如Java的代码,我平时这样排版。

public class HelloWorld
{
    public static void main(String args[])
    {
        System.out.println("我是Java");
    }
}

不用的代码和引用删除

我们写代码时,需要修改代码时经常注释之前的代码,然后把自己的代码加上去。但是又不确定自己的代码100%正确,不敢删掉注释的代码,因为可能还会换为原来的代码。

这样导致的后果是以后如果没有看出注释代码的问题,反而觉得很有道理的话,真的会将你的代码重新用注释代码换回来。

我们写代码要相信自己,该删的时候就要删掉。要学会使用SVN或者是Git来进行版本控制。即使当前版本删掉了,回滚到之前版本依然能够找回来。大可不必担心真的会删掉了,这样万一有什么变故,也还是能够找回来的。

我们也会经常注意到编辑器行首有很多黄色的感叹号warning提示。虽然不影响程序正常运行,但是看着就是有点不雅观,而且过多没有使用的引用,或者外部包,框架,库等等也会拖慢程序的运行速度。干掉这些无用的东西既能净化我们的心灵,还能减少不易察觉的隐患。

不要用中文拼音做变量名

现在C#和Java都支持中文变量名,类名。可以试着玩一玩,但是真的不要用到项目中,不只是说中文,还有中文拼音。使用有意义的英文作为变量名更有利于沟通,和外国人沟通方便,和中国人沟通也方便。曾经看到有人设计数据库,字段名全部使用中文拼音缩写,令人费解,而且非常别扭,大概只有自己能看懂吧。

英文变量名也不要用a,b,c,d作为变量名,使用有意义的单词全称一眼就知道这个变量,这个类是做什么用的。大家都很忙,没时间猜来猜去。

可用,清晰优雅,高效

具体到一个实际的功能,代码是可用的,看起来清晰优雅的,运行起来高效的才是好代码的标准。

要做到这三点,首先要明确需求,考虑全面一点,从正确性,边界值,反例三个角度去思考问题,定下详细的需求,掌握需求方的意图。
其次,需要先做一个Demo,用于双方进一步确认需求。没有Demo,双方都不是很确定对方有没有get√到我的意思。有了Demo,绝大部分需求都可以确定下来了。一个粗糙的成品好过一个精美的半成品。不要过早优化,先把粗糙的成品做出来,后续慢慢优化。
最后,具体到代码,很多时候都需要调试代码,不要一上来就断点调试,先看一遍代码,检查代码逻辑,理一理思路,然后采用二分法设置断点输出日志,快速定位问题代码。优化时,确定一个优化的基准,优化之后有对比,用数据来告诉别人优化的效果。

多写代码,多思考

多写代码,多思考;多喝热水,多锻炼。

好的代码是在一定代码量的基础上积累起来的,写的时候要多加思考,不能不知道自己在干什么。

程序员长时间坐在椅子上,对脊椎伤害很大,脖子僵硬。建议多喝热水,多活动。写代码一小时就要停下来休息一下,走一走,动一动。多锻炼身体,身体是革命的本钱。

转载请注明出处:

http://blog.csdn.net/gane_cheng/article/details/52152497

http://www.ganecheng.tech/blog/52152497.html (浏览效果更好)

原文地址:https://www.cnblogs.com/yunliu0603/p/10042463.html

时间: 2024-08-04 10:00:58

代码规范、如何写出好代码的相关文章

php项目代码规范-&gt;如何写出规范而易于理解的项目代码

2019年5月17日10:50:12 前序: 很多时候,PHP代码风格过于自由,导致一个项目有N多种写法风格,有些人为了自己认为的技术"高",经常写一些奇奇怪怪的写法比如: 例子1,一个很简单的功能,给你写N个回调函数,导致代码可读性基本为零., 例子2,比如 if else 不写{} 吧代码块包起来,不是所有的人用的ide都可以识别这种写法,当然php的引擎解析不会有问题 例子3,比如为了代码方便 经常写匿名函数,一层套一层,为了写法更简洁,代码无法复用,代码可读性很低 以上的说道的

写出优美代码的方式,两个习惯:一步到位VS迭代优化

最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化:解耦以复用,拆分方法以复用,使用循环减少冗余,限制循环次数减少无效操作,等等.. 这个想法一定没有错,但很多时候往往会是这样的情况: 当功能一复杂,比如你已经分解了几个方法,比如你已经使用了几层循环(有点过分...),比如在多线程中 你经常无法一步到位地完成那么多优化 这往往造成你写一句代码会思考很久

导致程序员写出烂代码的35个恶习,看看你染上了几个?

IT行业的科技公司们一直苦苦追寻传说中以一当十的超级程序员,最新的研究表明确实存在这样一小撮效率奇高的"程序金刚",但是一位普通程序猿如何能够蜕变成代码金刚呢? 国内外的各大专家总结了导致程序猿效率低下,代码为什么像坨shi一,样难以维护的35条恶习(归为代码组织.团队工作.写代码.测试与维护四大类). 代码组织 1.总是说"一会弄好",但从来不兑现.(缺乏任务管理和时间管理能力) 2.坚持所谓的高效.优雅的"一行代码流",事实上,可读性才是最重

如何优雅的写出链表代码

理解指针或引用的含义 含义: 将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用). 示例: p—>next = q; 表示p节点的后继指针存储了q节点的内存地址. p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个节点的内存地址. 警惕指针丢失和内存泄漏(单链表) 1.插入节点 在节点a和节点b之间插入节点x,b是a的下一节点,,p指针指向节点a,则造成指针丢失和内存泄漏的代码:p—>next

你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效率的关键,而且一个好的码风可以让自己读起来也赏心悦目.那么接下来我就会对这一部分进行讲解. 变量命名 我将码风分为两个部分,变量命名和代码书写. 变量命名当中,最最最最恶心的一点就是拿拼音来为变量命名,你拿x,y,z都好过.什么书本的数量用"shuben",你是小学没学过吗?我幼儿园都会&

? 按照所给的程序流程图,写出Java代码(用类和方法实现)

代码为:package com.lwk.test2; 主类: import java.util.Scanner; package com.lwk.test2; public class Demo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); test.test(); } } 方法类: package

finally中调用unlockWrite对写出健壮代码是很重要的

一般用于某张表的补充,比如用户基本信息是一张表,但并非每一个用户都需要有登录的权限,不需要记录用户名和密码,此时,合理的做法就是新建一张记录登录信息的表,与用户信息进行一对一的关联,可以方便的从子表查询母表信息或反向查询 外键:有很多的应用场景,比如每个员工归属于一个部门,那么就可以让员工表的部门字段与部门表进行一对多关联,可以查询到一个员工归属于哪个部门,也可反向查出某一部门有哪些员工 如果某个线程想要读取资源,只要没有线程正在对该资源进行写操作且没有线程请求对该资源的写操作即可.我们假设对写

理解SQL原理,写出高效代码

做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还能保证下一个人能看懂我们的存储过程吗?(顺便打一下广告,我们也做ERP,欢迎联系咨询) 要知道sql语句,我想我们有必要知道sqlserver查询分析器怎么执行sql语句的,很多人会看执行计划,或者用profile来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查询分析器的执行逻辑顺序.平时大家多

写出以下代码运行结果(包括单击事件的输出)

1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script> 9 function CreateDiv(){ 10 this.m_Text='Hi,welcome'; 1