写这样的方法让人很反感

写作文要做到段落清晰、每段思路流畅、每段主旨明确,要有一条清晰的线穿插整篇内容,编写程序代码和写作文是一个套路。一个类就像一篇小作文,类的单一职责就是小作文要叙述的主旨,类的方法就是小作文的段落,类的方法组合在一起就是小作文的整篇内容。类的方法要像文章的段落一样,有主旨,即只做一件事;思路清晰,即先做什么、后做什么。方法没写好就像作文的段落没写好一样,会让人有一种“写的都是啥”的反感。下面出现的方法,会让阅读代码的人很反感。

太随意的方法名

getAbc()。get是得到、抓住的意思,getAbc是想表达获取abc,但是没表达出如何获取的,get开头的方法应尽量是getter方法。

一个方法就是一个要执行的动作,应该以动词开头,结合名词、形容词,使用一些有意义、可搜索到的、读的出来的单词,方法名应该名副其实的描述方法体的内容,做到看其名知其意,如queryAbcFromDB。

参数列表太长

queryAbcBy(arg1,arg2...argn)。方法的参数列表太长,在使用时需要去关注每个参数传什么值、取哪个参数的值。更糟糕的情况,参数列表的参数名是arg1、arg2这种无意义的命名,这样的方法封装成jar给他人使用,对使用者来说很茫然,不知道如何使用。

如果一个方法的参数列表个数大于等于3,就需要将这些参数封装到一个类中,使用这个类作为参数,这样对使用者来说容易很多。

冗长的代码行

一个方法体的代码行数几十行,甚至上百行。阅读这样的方法,相信很多人的心里是拒绝的。冗长的代码行像写作文不分段落一样,把各种论述杂糅到一起,根本看不明白想描述什么,而且这样的方法一定做了不止一件事。

方法体要短小且只要一件事,做到职责单一,这样的方法一目了然,易于阅读和理解。判断一个方法是否不止做了一件事,那就是看是否能再拆出一个方法。在拆方法的时候,做到拆出来的方法是同一个抽象等级的,其实就像一个操作拆成很多步骤一样,每一步拆成单独的方法,而这些步骤在这个操作里是同一等级,顺序执行的。

深层次逻辑嵌套

if(x==1){ for(;;){ if(y==2){ if(z==3){ if(m==4){ }else{ } } } } }

这样的逻辑嵌套对阅读者来说就是一种折磨,在不断深入理解每层逻辑的同时,还要记住每层的逻辑标识,有时还需要跳回到原来某层的另一个逻辑。如果用这样的方式去写作文,正写着某一个主题,突然写另一个小片段,写着写着又突然写另一个小片段,不断变主题,等回到原主题的时候,会让人回想“刚刚写到哪了”,倒不如正事之前,把那些无关紧要的先做掉,或者合到一起。

对于这样深层次的逻辑嵌套,可以使用先否定、合并逻辑的方式去优化。如上面的伪代码不是先判断x==1嘛,可以先判断x!=1,y==2和z==3可以合并到一起,优化后的伪代码如下。

if(x!=1){ return ; } for(;;){ if(y!=2 || z!=3){ continue ; } if(m==4){ }else{ } }

过早定义局部变量

String resultCode; Response response; if(hasParamEmpty){ //抛异常 ... } //网络通信 ...

resultCode和response过早的定义,有可能根本用不到,浪费存储资源。局部变量的定义要和使用到它的代码很近,用到再定义。

原文发布于微信公众号 - JavaQ(Java-Q)

原文发表时间:2017-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

让你一看就明白什么是代理模式--java版本_源码下载

======================================================

19330
来自专栏Linyb极客之路

UML类图(下):关联、聚合、组合、依赖

关联(Assocition)关系是类与类之间最常见的一种关系,它是一种结构化的关系,表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等。...

17120
来自专栏二次元

什么是递归?

一上来你肯定觉得读这句话好绕,好吃力。 其实你用递归来读就很简单了: 递归要有一个终点(小鲤鱼) 当递归尚未达到终点的时候,函数会反复调用自己。 ...

13000
来自专栏程序人生

谈谈数据结构

沃斯大神说过,程序 = 算法 + 数据结构。 程序君认为,等式的右边,数据结构的权重要大于算法。数据结构定义好,基本上,你所用的算法也就确定了,算法的时间复杂度...

38570
来自专栏C/C++基础

设计模式(11)——模板方法模式(Template Method Pattern,行为型)

模板方法模式(Template Method Pattern)属行为型,在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中,使子类可以不改变算法结构即可重定...

9520
来自专栏JadePeng的技术博客

知识图谱学习笔记(1)

RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用...

21300
来自专栏小詹同学

Leetcode打卡 | No.18 四数之和

欢迎和小詹一起定期刷leetcode,每周一和周五更新一题,每一题都吃透,欢迎一题多解,寻找最优解!这个记录帖哪怕只有一个读者,小詹也会坚持刷下去的!

12520
来自专栏Android机动车

简单工厂模式

含义:简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此...

9410
来自专栏Golang语言社区

谁发明了Go?

谁发明了Go Go语言的设计和实现工作是由Google的一个研发小组以及来自世界各地的大量贡献者共同完成的。 动机 为什么要发明一门新语言? 在当今世界,编程语...

70440
来自专栏工科狗和生物喵

【计算机本科补全计划】指令:计算机的语言(MIPS) Part4

正文之前 这几天陪人玩去了,所以没怎么看书。今早某人回家了。所以我也就可以一个人继续开始在图书馆的浪荡之路了。爽歪歪!!!!而且可以一个人独占温暖的地方,实在...

35860

扫码关注云+社区

领取腾讯云代金券