1.关于命名
前面有提到过有关函数的命名问题,这里再讲一次: 
 函数名(方法名)要使用动词+名词。
public static void main(String []args){
    int firstNum = 1;
    int secondNum = 2;
    System.out.println("sumNum ="+addTwoNums(firstNum,secondNum ));
}
public static int addTwoNums(int firstNum,int secondNum){
    return上面的名称:addTwoNums就是动词+名词格式,不用看代码单独看名字,就知道这个函数(方法)是求两数和的,这就是这种命名方式的好处。单用动词add,绝对不会马上知道这个具体的工作。是添加到数据库?添加到列表?还是求和?要有个识别的过程,这个过程,我称之为浪费时间的过程。
2.关于贪心
例子:
public static void main(String[]args){
    int firstNum = 5;
    int secondNum = 3;
    System.out.println(getSumOfTwoNums(firstNum,secondNum));
    //doSomething...
    System.out.println(getSumOfTwoNums(5,2));
}
public static int getSumOfTwoNums(int firstNum,int secondNum){
    ++firstNum;
    return发现问题了吗?求和函数(方法)里面竟然有一句++firstNum;!!!第一次用的时候,可能是因为某种需要,所以需要把firstNum加一。为了方便,把它和后面的相加写在一起了。这样后面用的时候可能导致错误,因为后面用到的时候你已经忘记了这个函数(方法)里面你居然一时脑抽把加一这样的代码写在里面了。
贪心:你的函数和方法把没提到的事顺便做了。 
修改:不要做你的函数(方法)没有提到的事,这可能导致你后面的调用造成隐患。
3.关于参数
public class MethodDothings{
    public static void main(String[] args){
            MethodDothings methodDothings = new MethodDothings();
            int year  = 2017;
            int month = 2;
            int date = 15;
            int hour = 11;
            int min = 29;
            int sec = 55;
            methodDothings.printDateTime(year,month,date,hour,min,sec);
   }
    public void printDateTime(int year,int month, int date,
        int hour, int min, int sec){
        System.out.println(year+"年"+month+"月"+date+"日 "+hour+":"+min+":"+sec);
    }
}这是我仿照最近重构的代码写的逻辑,这段代码的的确确是把年月日时分秒传进去了,现在看到这段代码的时候,我的感受是:太可怕了,幸好我没有因为它犯错!
如果我一不小心传了两个min,变成:
methodDothings.printDateTime(year,month,date,hour,min,min);
我很容易忽略掉这个错误,为后续的调试工作造成隐患。
函数的参数不要超过三个,尤其是相同类型的时候,否则会给我们传参带来困难:
- 困难1:记不住顺序,每次都要重新查看形参列表
- 困难2:很容易搞错顺序,传错了参数可能一时无法发现
- 困难3:对于传入参数的逻辑相关性很难记忆,或许为了传参,你要重新查一遍这个函数。
更好的做法(增加一个类):
public class MethodDothings{
    public static void main(String[] args){
            DateTime dateTime = new DateTime();
            dateTime.setYear(2017);
            dateTime.setMonth(2);
            dateTime.setDate(15);
            dateTime.setHour(11);
            dateTime.setMin(29);
            dateTime.setSec(55);
            MethodDothings methodDothings = new MethodDothings();
            methodDothings.printDateTime(dateTime);
   }
    public void printDateTime(DateTime dateTime){
        System.out.println(
        dateTime.getYear()+"年"+dateTime.getMonth()+"月"+dateTime.getDate()+"日 "
        +dateTime.getHour()+":"+dateTime.getMin()":"+date.getSec());
    }
}public class DateTime{
    private int year;
    private int month;
    private int date;
    private int hour;
    private int min;
    private int sec;
    public void setYear(int year){
        this.year = year;
    }
    public int getYear(){
        return year;
    }
    public void setMonth(int month){
        this.month = month;
    }
    public int getMonth(){
        return month;
    }
    public void setDate(int date){
        this.date = date;
    }
    public int getDate(){
        return这样确实可以增加可读性,但是很麻烦,每次用都要dateTime.getXX(),有更简单的吗?有!
public class MethodDothings{
    public static void main(String[] args){
            DateTime dateTime = new DateTime();
            dateTime.setYear(2017);
            dateTime.setMonth(2);
            dateTime.setDate(15);
            dateTime.setHour(11);
            dateTime.setMin(29);
            dateTime.setSec(55);
            dateTime .printDateTime(dateTime);
   }
}public class DateTime{
    private int year;
    private int month;
    private int date;
    private int hour;
    private int min;
    private int sec;
    public void setYear(int year){
        this.year = year;
    }
    public void setMonth(int month){
        this.month = month;
    }
    public void setDate(int date){
        this.date = date;
    }
    public void printDateTime(DateTime dateTime){
        System.out.println(
        year+"年"+month+"月"+date+"日 "
        +hour+":"+min":"+sec);
    }
}这样就好多了,优点如下:
- 不容易传错参数,setXX明确了当前设置的变量。XX和我们设置的数值距离更近,而且只需要设置一次,保证这一次传参正确,以后传递对象的结果都正确。
- 高封装性。可以注意到把DateTime里面的get都删除了,以后要得到各种时间格式也可以通过这个类来返回。
                










