写给所有程序员_你的函数(方法)还好吗?
来源:互联网 发布:怎么从淘宝店铺看电话 编辑:程序博客网 时间:2024/05/30 05:14
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 firstNum + secondNum;}
上面的名称: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 + secondNum;}
发现问题了吗?求和函数(方法)里面竟然有一句++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 date; }}
这样确实可以增加可读性,但是很麻烦,每次用都要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都删除了,以后要得到各种时间格式也可以通过这个类来返回。
- 写给所有程序员_你的函数(方法)还好吗?
- 写给所有程序员_你的逻辑不要太贪心
- 你过的还好吗
- 亲爱的,你还好吗?
- 远方的你还好吗
- 你的WIFI还好吗?
- 写给所有程序员_寻求更优解_你值得更好的
- 写给所有程序员_你的逻辑可以更简洁易读吗?
- 想念的你现在还好吗?
- 我的朋友你还好吗
- IT人才你的颈椎还好吗?
- 远方的你现在可还好吗?
- 两年没见了,你过的还好吗?
- 亲爱的BUG,你现在还好吗?
- 河北省三河市的纪海婷,你还好吗?
- 我们的青春,你还好吗?
- 你还好吗?
- 爷爷你还好吗
- Tableau使用
- SASS用法指南
- POJ 2229 Sumsets(基础dp)
- Shader简介
- jQuery获取Select选择的Text和 Value(转)
- 写给所有程序员_你的函数(方法)还好吗?
- Python协程从零开始到放弃
- 陌生的——自媒体发展对企业的影响
- 图片懒加载
- LESS用法指南
- Unity烘焙动态光照实现光源优化
- 关于Spring+Hibernate注解式整合问题
- Unity_Itween插件
- Fiori学习笔记