Java代码中我在工作中是如何优化代码的

首先说一个最重要的优化原则:代码优化是每天都要进行的,而不是一两个月做一次大优化,那时做就已经晚了。另外由于优化是每天做的,所以你不需要一次的就过度优化,保持小步快跑即可。

这个原则为什么重要?因为很多程序员会在写代码的时候说「先不优化了,等不忙的时候再优化」,然后……就没有然后了。

基本上「烂代码」就是因为「不忙的时候再优化」造成的。

别给自己写烂代码找理由

如果只要每天优化一点点代码,就能保持你的程序健康,你,能做到吗?

据我观察,90% 的程序员做不到。他们每天都会在心里找出如下理由来写出烂代码,或者对现有的烂代码视而不见:

这个项目我只维护几个月,没必要把代码写那么好,反正有人接盘。

这个项目是从别人手里接下的,代码真烂,要怪就怪之前的人,不是我的错,我胡乱加一些代码就行了,能用就行。

这是一个短期项目,没必要把代码写那么好

这是一个长期项目,明年再优化代码,现在能用就行

所以你看,不管我告诉他们多少优化代码的技巧,他们根本就不会去用的,这才是问题所在。

很多程序员抱怨公司代码烂,却从来不去尝试解决问题。(就像很多程序员抱怨培训班教出来的人水平差,自己却不写新人教程一样)

过手就变好

如果你不想变成上面那样的程序员,你只坚定一个信念:只要是经过我的手的代码,质量就会比原来好一点。

那么你很快就能把代码写好了。你可能急于听到把代码写好的技巧,但是我告诉你,技巧真的不重要,这个信念才是最重要的。

接下来就是技巧。

第一步:不要写烂代码

方方你是傻了吗,问的是「如何优化代码」,你的答案居然是「不要写烂代码」?!

没错,把代码写好的第一步就是不要写烂代码,也就是你要知道「什么样的代码是烂代码」:

基本上所有新人天天都在写烂变量名、烂注释和烂设计,而且还不写单元测试。

而且他们还不知道自己代码多烂!

所以第一步就是明白一个真相:你80%的代码都是烂代码。

你只需要把这些代码改得不那么烂,就是优秀的代码了……

再说一次:第一步至关重要,搞清楚什么样的代码是烂代码。

第二步:避免重复

也就是 Don't Repeat Yourself 原则。如果你发现有两行代码重复出现了好几次,你就应该把这两行代码封装成一个函数,放在一个恰当的地方,然后调用这个函数。

第三步:表驱动编程

如果你的代码有很多 if ... else ... 结构,你不知道怎么优化,你就应该使用表驱动编程。

优化前:

howManyDays(year, month){    if(month === 1 ||        month === 3 ||        month === 5 ||        month === 7 ||        month === 8 ||        month === 10 ||        month === 12    ){        return 31    }else if(month === 2){        return isLeapYear(year) ? 29 : 28    }else{        return 30    }}复制代码

优化后:

howManyDays(year, month){    const table = {        1: 31, 3: 31, 5: 31, 7: 31, 8: 31, 10: 31, 12:31,        4: 30, 6:30, 9: 30, 11: 30,        2: isLeapYear(year) ? 29 : 28    }    return table[month]}复制代码

优化前:

function calculateGrade(score){    if(score>=90){        return 'A'    }else if(score >= 80){        return 'B'    }else if(score >= 70){        return 'C'    }else if(score >= 60){        return 'D'    }else {        return 'E'    }}复制代码

优化后:

function calculateGrade(score){    const table = {        100: 'A',        90: 'A',        80: 'B',        70: 'C',        60: 'D',        others: 'E'    }    return table[Math.floor(score/10)*10] || table['others']}复制代码

第四步:用套路

设计模式就是一些编程套路,Unix 编程原则也是一些编程套路。

了解所有的套路,然后遇到问题选择正确的套路即可。

比如模块通信一般用事件模式或者命令模式;

比如解耦一般用中间层;

比如生命周期一般都支持钩子或切面;

比如性能优化一般都是加缓存;

比如 API 设计一定要正交;

比如复杂数据系统一般使用命令查询职责分离;

比如拿空间换时间拿时间换空间;

……

这一块还挺复杂的,够你纠结很久了,而且没有通解。唯一的通解就是 tradeoff。

第五步:坚持每天优化

我在课上说过,「每天优化」才叫重构,「每年优化」那叫重写。

优化的重点是「越来越好」,重点不是「一次写好」。

一旦你放松对自己代码的要求,你的代码就会迅速变成烂代码,而且很难恢复。

每当需求变化的时候,你都要重新审视你的整个系统,哪里有问题你就改那里,不允许「先临时改一下以后再优化」,你的代码就可以保持健康和活力。

可惜,大部分人做不到。就算我自己也会在需求太多的时候放松对代码的要求。

 在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,774评论 0 11
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,674评论 0 38
  • 卫建红阅读 134评论 0 0
  • 现在很迷茫,将来也很迷茫。很多人一直迷茫,不知何去何从。在繁华都市中没有一点归属感。有的只有孤寂落寞,二三十岁的人...
    子扬吖阅读 456评论 0 1
  • 每年进入6月下旬,就是我繁忙紧张工作的开始。 首先是负责中考和生物地理的考务工作,其次是期末考试的考务工作,继而是...
    刘超武阅读 465评论 1 1