关闭

优雅编程之项目开发中的22点编码小建议(三十七)

标签: 优雅编程意见编码
4045人阅读 评论(13) 收藏 举报
分类:

开心一笑

【建议大家尝试早睡觉,多运动,不吃宵夜,不抽烟,不喝酒,早睡早起,养成一个良好的生活习惯,久而久之,你就……一个朋友都没有了,好可怜的样子啊!】

视频教程

大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……

视频地址:http://edu.csdn.net/lecturer/994

提出问题

项目开发过程中应该注意的几点编码规范???

解决问题

唯美图片

本来不想写这篇文章的。之前在《优雅编程系列》的文章中,都有提过了。但是主管说要收集一些编码规范的建议,就针对公司情况.下面分享几点,get起来,以后不要再犯了……

1.接口里面的方法默认都是public

不用再加public修饰

2.字符串变量和字符串常量equals的时候将字符串常量写在前

可以避免空指针。

如:

if("123".equals(str)){
}
3.不要创建一些不使用的对象,不要导入一些不使用的类

类中import 没用的类要及时删除。

4.for循环建议写法
for (int i = 0, int length = list.size(); i < length; i++)
5.循环内不要不断创建对象引用

如:

for (int i = 1; i <= count; i++){
    Object obj = new Object();
}

改为:

Object obj = null;
for(int i = 0; i <= count; i++){
    obj = new Object(); 
}
6.尽量避免随意使用静态变量

如:

public class A{ 
    private static B b = new B();
}

此时静态变量b的生命周期与A类相同,如果A类不被卸载,
那么引用B指向的B对象会常驻内存,直到程序终止

7.方法的返回值不要为空

如:return null;

1.返回List:

private List<PcsTaskDTO> sortDecisionAndBackTask(List<PcsTaskDTO> pcsTaskDTOList) throws Exception{
        if(CollectionUtils.isEmpty(pcsTaskDTOList)) return null;
}

解决方法:

private List<PcsTaskDTO> sortDecisionAndBackTask(List<PcsTaskDTO> pcsTaskDTOList) throws Exception{
        if(CollectionUtils.isEmpty(pcsTaskDTOList)) return Collections.EMPTY_LIST;
}

2.返回Set:

Collections.EMPTY_SET

3.返回Map:

Collections.EMPTY_MAP
8.不要在for循环中查询数据库

小心第三方测试公司弄死你!

9.代码层级不要太深,最多3层

如:

/**
 * 只做一件事
 */
public void onlyDoOneThing(){
    String ay = "";
    Boolean flag = true;
    /** 第一层级 不错 **/
    if(flag){

        /** 第二层级 还能接受 **/
        if(flag){

            /** 第三层级 没法接受了 **/
            if(flag){

            }
        }
    }
}
10.每个方法的代码不要太长

如果一个方法的代码超过一屏幕,建议拆分为多个

如:
if(){
..业务代码1
}else{
..业务代码2
}

for(int i=0;i<100;i++){
    ..业务代码3
}

对于if,和for中的代码,如果是处理业务代码,一般可以抽出单独的一个代码,改成

if(){
    method1();
}else{
    method2();
}

for(int i=0;i<100;i++){
    method3();
}   

method1(){
    //业务代码1
}


method2(){
    //业务代码2
}


method3(){
    //业务代码3
}
11.函数参数:应该少于2个

如果函数超过2元:应该将其中的某些参数封装成类;

例:

/**
 * 只做一件事
 * @param arg1  参数1
 */
public void onlyDoOneThing(String arg1){

    System.out.println("一个参数,不错!!!");
}

/**
 * 只做一件事
 * @param arg1  参数1
 * @param arg2  参数2
 */
public void onlyDoOneThing(String arg1,String arg2){

    System.out.println("两个参数,能接受和理解!!!");
}

/**
 * 只做一件事
 * @param arg1  参数1
 * @param arg2  参数2
 * @param arg3  参数3
 * @param arg4  参数4             
 */
public void onlyDoOneThing(String arg1,String arg2,String arg3,String arg4){

    System.out.println("3个或3个以上的参数,没法接受!!!");
}
12.删掉被注释掉的代码

除非那段代码,删掉,人会死掉。

13.避免括号后面的注释

错误注释比不注释跟可怕,最好做到代码既注释。

如:下面提供一个例子,方便理解:

package com.hwy.test;

/**
 * 代码整洁之道
 * Created by Ay on 2016/7/11.
 */
public class CodeCleanTest {

    public static void main(String[] args) {

        /** 这段代码是不需要注释的,看方法名称就可以清楚知道意图了 **/
        engagements();
        boolean isMerryMe =  canMerryMe();
        if(isMerryMe){//避免括号后面的注释,例如这

            getMarried();
            /** 删掉被注释掉的代码; **/
            //String ring = "";
        }

        /** TODO注释,提示尚未完成的工作 **/
        //TODO 结婚生子

        /** 悄悄话内容,这里涉及到一些业务上的事,所以需要注释下 **/
        String whisperContent =  getwhisperContent();
    }


    /**
     * 获得悄悄话内容
     * @return
     */
    public static String getwhisperContent(){
        return "XXX OOO";
    }

    public static void engagements(){
        System.out.println("约会");
    }

    public static boolean canMerryMe(){
        boolean isLoveMe = true;
        if(isLoveMe)return true;
        return false;
    }

    public static void getMarried(){
        System.out.println("结婚");
    }

}
14.不要使用单个字母来做变量名

时间一长,自己都不清楚自己当初的命名是什么意思

15.不要使用有误导性的字母作为变量名

比如小写字母l和大写字母O,因为他们和数字的1和0很像(老话题了)

16.类名和对象名一般都是名词和名词短语,而不应当使用动词
17.方法名一般是动词和动词短语;get,set,is前缀

如:

public void getUsers();
public void getData();
public void isCompleted();
18.对于方法名

应该保持一致,比如对于绑定数据的方法,不要有的地方用BindData,而另一些地方使用DataBind ;

19.避免误导:userList的类型最好就是List

例:

//错误
String userList = "";
//正确
List<String> userLit = new ArrayList<>(); 
20.使用可搜索的名称:避免使用单字母变量和数字常量

错误:

int s = 0;
for(int i=0;i<100;i++){
    s = s + i;
}

正确:

//起码sum在搜索时比较方便
int sum = 0;
for(int i=0;i<100;i++){
    sum = sum + i;
}   
21.单行代码长度

以不拖动滚动条为准则,代码行长度80个字符可以接受,最多120个字符,再多,你想逆天啊!

22.去掉System.out.println

代码部署到生产环境前,去掉全部System.out.println

读书感悟

来自 弗兰西斯·培根《培根论人生》

  • 如果问在人生中最重要的才能是什么?那么回答则是:第一,无所畏惧;第二,无所畏惧;第三,还是无所畏惧。
  • 人生如同道路。最近的捷径通常是最坏的路。
  • 在世之时与人为恶,到头来却是于己不幸。
  • 没有真挚朋友的人,是真正孤独的人。
  • 奇迹多是在厄运中出现的。
  • 凡过于把幸运之事归功于自己的聪明和智慧的人多半结局是不幸的。
  • 有些书可供一赏,有些书可以吞下,有不多的几部书则应当咀嚼消化;有的书只要读读其中一部分就够了,有些书可以全读,但是不必细心地读,还有不多的几部书则应当全读、勤读,而且用心地读。

经典故事

【有个小弟在脚踏车店当学徒。有人送来一部坏了的脚踏车,小弟除了将车修好,还把车擦拭得漂亮如新,其他学徒笑他多此一举。车主将脚踏车领回去的第二天,小弟被挖到他的公司上班。启发:原来出人头地很简单,勤快点就行】

参考文章

【1】写出优雅性能的JAVA程序必须遵守的35个原则
【2】Effective java 第二版本
【3】clean code(代码整洁之道)
【4】Thinking in Java(Java编程思想)

唯美图片

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

14
0
查看评论

编程之禅 浅谈封装

作为一个整天与代码打交道的人,你真的会coding吗? 今天依旧来反思一下自身。伊始大一的时候,刚接触到了C语言,一门神奇的语言。老师就教导我们要多敲例子,照着书本敲就可以了。可能当时并没有真正的理解老师的意思,所以就只是照着课本敲,(尴尬的是,我真的就只是照着课本上一字一字的敲,-_-!!!)也因...
  • Marksinoberg
  • Marksinoberg
  • 2016-06-17 10:00
  • 6829

JDBC编程之程序优化

首先,新建包package com.djx.entity;,其中类为 Identity ,实现代码如下: package com.djx.entity; public abstract class Identity { protected Long id; public Long...
  • dengjiaxing0321
  • dengjiaxing0321
  • 2016-03-16 15:49
  • 127

传智168期--Linux&LAMP编程之Linux2016版额外笔记(2017年8月25日18:50:55)

学Linux的过程中做的一点点笔记,学了几天。 笔记下载地址:http://download.csdn.net/download/juliantem/9950769 http://download.csdn.net/download/juliantem/9950771 或者 链接:http:/...
  • juliantem
  • juliantem
  • 2017-08-25 18:50
  • 224

GPS模块编程之NMEA0183协议

原文地址:http://blog.csdn.net/northcan/article/details/7261310 #################################################################  GPS模块编程之NMEA0183协...
  • heli200482128
  • heli200482128
  • 2016-06-14 15:23
  • 366

《编程之禅》 转自BlackEagle_的专栏

前言  《编程之道》的出版在程序设计业内得到了普遍的接受,出版社邀请我翻译一些与之相关的文章,以作为那部著名的经典之作的补充。虽然,我申明我的能力难以胜任,但我最终还是被说服试一试。  本书是许多个月来研究和翻译的结果,它试图通过对那些传统著作的摘录,来馐一个...
  • sghe
  • sghe
  • 2006-02-17 13:20
  • 399

COM编程之二 接口

【1】接口 DLL的接口是它所输出的那些函数。 C++类的接口是该类的一个成员函数集。 COM接口是包含一个函数指针数组的内存结构。 每一个数组元素包含的是一个由组件所实现的函数的地址。 在COM中接口就是一切。对于客户而言,一个组件就是一个接口集。 客户只能通过接口才能同COM组件打交...
  • liujiayu2
  • liujiayu2
  • 2015-04-16 18:30
  • 356

编程之禅·水

一程序不过是梦,生于无形无象的禅中,我们只是那做梦的人。二我编程三日,两耳不闻人声,只有硬盘在歌唱。三编译程序在运行,像一条湍急的河流,我静静地等侯。四为何要用LISP?COBOL语言我不懂,所以我用LISP。五编程一整夜,透过窗户,照到屏幕上,初升的太阳。六硬件和软件,我们是你们的主人和奴隶,我们...
  • ccanan
  • ccanan
  • 2007-03-17 00:38
  • 1719

第五周(2) 后台代码解耦与客户端具体功能设计

引言 本周恰巧是开发周期的中期,我们按部就班有条不紊的按照原计划进行开发,这一阶段我们主要的任务有以下几个方面: DAO层的代码重写与解耦评论功能+@我的消息 下面我就我所编写的客户端@我的消息功能做吓介绍: @我的消息 @我的消息界面显示的是邀请我作为flag监督人的...
  • qq_26610669
  • qq_26610669
  • 2017-06-05 11:28
  • 66

WinForm编程之XML读写

1 using System;  2  using System.Data;  3 using System.Configuration;  4 using System.Web;  5 using System.Web.Security; ...
  • zz_dd_yy
  • zz_dd_yy
  • 2014-06-07 17:45
  • 231

mysql编程之生日问题

关于mysql的编程,很看重逻辑思维,如果不能理清思路,那么很难写出要实现的逻辑代码。今天学到了关于日期的经典sql编程问题中的生日问题,算是一个入门案例,看看它时如何一步步实现最终的结果。 描述:生日,也就是存储的一个日期,其中有一个特殊的日子需要特殊对待,那就是闰月处理。比如有个伙计实在是倒霉,...
  • ALittleSpring
  • ALittleSpring
  • 2017-05-28 17:13
  • 356
    个人资料
    • 访问:420767次
    • 积分:5627
    • 等级:
    • 排名:第5581名
    • 原创:201篇
    • 转载:0篇
    • 译文:0篇
    • 评论:313条
    个人教程

    CSDN视频教程

    个人信息
    博客专栏