毕业一年多,在代码上我是一直有强迫症的,我希望我写的代码能够通俗易懂且漂亮,像Sonar,阿里规范插件我都会装,我不喜欢Idea给我提示波浪线,所以我都会去把这些IDE提示的可优化的全部修改掉。
现在去看我去年八月份入职时候写的代码很显然是那么幼稚且有待优化,一团代码挤在一个方法里,方法可能看起来是那么冗余且杂乱。Java 8给我们撸码带来方便,链式写法可以让代码更加美观漂亮,看自己之前的代码方法有不少可以优化成链式而非使用大量的if
,如果有机会再次接手,我可能就会去推翻重构,虽然我只是一个CURD小开发仔,但是我对于重构还是乐意去做,我不希望在我有一天离职之后别人接手我的代码是一顿臭骂:谁写的垃圾代码!去年我接手我们另一个离职的人的代码,我感觉就很舒服,他的代码在不少地方都做了很认真的抽象,方法提取,具备良好的可扩展性,我希望我写的也是如此,所以我一直在调整自己的代码写法,尽量做到可读性与优雅。
我现在写代码的几个准则:
- 一个方法行数尽量少且精简,把抽象的逻辑封装到方法,用方法名体现你封装代码是在做什么
- 方法的职责是单一的,一个方法只做一件事
- 方法命名准确,为此我还特地整理了一些用于命名的单词【见文末】
- Java 8的链式写法,尽量不把每一个环节的复杂操作暴露出来,通过方法名去包装这些操作
- 类的职责划分,即使可能是某几个类的通用的方法处理,建议根据他们的职责划分
- 在以块中如果遇到初始化一些不可变的集合优先考虑使用
ImmutableMap
,ImmutableList
,使用不可变的集合 - 命名习惯:Map命名:
keyToValueMap
,List一般命名为:xxxList
,如果是组装入参可能我会使用generate
,组装返回结果会使用build
,如果需要把一个List中的多重List展平就使用flatten
等等。
方法的命名是一门艺术,需要自己不断去摸索,寻找最合理最通俗易懂的命名方法,并把它固定下来成为自己的命名风格,想要了解更多的命名风格,肯定是要去多阅读源码,从别人的命名方法中学习成长。
附[打钩是个人在某类别中常用的]:
注:加√ 的是个人倾向于优先选择使用的
名称 | 英文名 |
---|---|
组装相关 | build(建造;创建;建筑;开发;建立;建设;构建) |
generate(产生;引起生成;发生;生殖) | |
fabricate(制造;编造;捏造;装配,伪造;制作;建造) | |
assemble(装配;议会;集合;组合体;组装;组件;程序集) | |
refactor(重构;重构你的代码;代码重构) | |
render(渲染;使得;致使;提供;给予;提交;翻译) | |
compose(组成;作曲;创作(音乐);构成;写作;组合) | |
通用 | general (全体的;普遍的;总的;正常的;一般;常规;通用) |
common(常见的;通常的;普遍的;共有的;普通的;共同的;公共的) | |
处理 | process(处理;加工;审核;数据处理,经过特殊加工的;(用化学方法等)处理过的;照相制版的;三色版的) |
handle(处理;控制;操纵;拿) | |
parse(解析;剖析;分析语句) | |
interpret(诠释;说明;口译;把…理解为;解释;翻译;阐释) | |
获取 | get(得到;获得;使;收到) |
fetch((去)拿来;(去)请来;售得)注:从远处取来,可以用于从dna此类的获取 | |
extract(提取;摘录;提炼;获得) | |
聚合 | reduce(减量;降低;简化) |
compound(合成;加重;构成;使…复杂化) | |
aggregate(合计;总计,集合;聚集;聚合) | |
每个 | every(每;所有的;一切可能的;无论哪个…都) |
each(每个;各;各自;每一)√ | |
per(每;每一) | |
转换 | transform(调任;调走;转学;转移;迁移;转让;转换)√完全地、彻底地改变一个人或一个事物的外表或性质,transform into |
convert(转换;可转变为;可变换成;(使)改变(宗教或信仰))√指改变形式、用途、使用方式等,也指改变信仰、观点、态度等;convert into | |
reform(改革;改进;改良;改造(行为);革新;改正) | |
切割 | split(使分裂(成不同的派别);分开;分担;分摊;分割;劈开)√ |
divide(分割;除;分隔;分配) | |
cut(切;割;割破;划破;切割(cutting);剪切) | |
拼接 | join(加入;参加;连接;参与;合并;联结;结合) |
符号相关 | semicolon(分号) |
`` | comma(逗号) |
`` | point(点) |
underscore(下划线)【不使用underline,它是在一个词语或是句子下面表示强调的】 | |
hyphen(中横线) | |
back/forward slash(正斜杠/反斜杠) | |
colon(冒号) | |
展平 | flatten((使)变平;把…弄平;摧毁;轻易击败;使变平;压平;展平) √ |
expand(扩大;扩展;详述;细谈;扩张;展开;膨胀) | |
level(对准;使平坦;使平整;(人、风暴等)摧毁;夷平;荡平) | |
增加 | add(添加;增加;补充说;继续说) √ |
insert(插入;嵌入;(在文章中)添加;插入块;插入记录;插入键) | |
append(增补;附加;追加;添加) √ | |
校验 | check(检查;查看;检验;核查) √ |
validate(确认;证实;批准;确证;验证;使生效;使有效)√ | |
verify(核实;证实;证明;查对;验证;校验;检验)倾向于验证,断言此类 | |
状态 | state(状态;国家;状况;州) |
大 | greater(伟大的;优异的;贵族的;很多的;伟大的;擅长;巨大的;数量大的)【比较大小使用】 |
标识符 | identifier(标识符(可用以进入程序或其中的数据集)) |
调用 | call(呼叫;调用;访问) |
阈值 | threshold(阈;门槛;起点;开端阈值;阀值;临界值) |
未命中 | miss(失去;失误;错过;未命中) |
删除 | expunge(删掉;擦去;删除) |
sweep(扫;打扫;清扫;清除) | |
delete(删去;删除) | |
cleanup(清除;清理;清除状态) | |
旧的 | stale(陈旧;不新鲜的;陈腐的) |
一致 | identity(身份;同一性;一致;特征) |
值,条目 | value(值;价值观;数值;用途)item(项目;一条款;条目;项目名称)val(值)entry(记录;词条;登录;录入;条目) |
复用 | reuse(重复使用;再次使用) |
遍历 | traverse(遍历;横切;穿过;横过;横越;横渡) |
原始/未经处理的 | raw(生的;未经加工的) |
original(原来的;起初的;最早的;首创的) | |
主要的 | primary(主要的;最重要的;基本的;最初的) |
检查/检测 | inspect(检查;视察;查看;审视) |
detect(发现;查明;侦察出;检测;探测;察觉) | |
retrieve(找回;取回;挽回;索回,检索;收回;重新得到) | |
XX器(例如解析器,转换器诸如此类) | resolver(解析器;解决者) |
provider(提供者;供应者;供养人) | |
converter(转换器) | |
handler(处理器) | |
interceptor(拦截器) | |
parser(解析器;分析器;语法分析器) | |
processor(处理器;加工机(或工人);处理机) | |
validator(校验器;验证程序;验证控件) | |
introspector(内省器) | |
detector(探测器;侦察器;检测器) | |
decorator(装饰模式;装饰器;装饰者) | |
holder(持有者;拥有者;支托(或握持)…之物) | |
discoverer(发现者) | |
encompassing(包罗万象的,包含;围绕;完成) | |
container(容器;容器类;包装容器) | |
属性问题 | 如果resultlist 是table的属性,那就是resultList of table |