“如果你喜欢一个人,就应该尽量少说那些甜言蜜语。”不知道大家是否听过某些恋爱专家的肺腑之言。对于程序员来说,如果你热爱编码,那么我也劝你:“能少写一行代码就尽量少写一行。”

可能有些同学觉得这话听起来有点玄乎:“代码写得少,不就意味着缺乏实战经验吗?那我何年何月才能进一线大厂,成为真正的大神呢?”

如果你要这么理解的话,我就必须要纠正你一下。我表达的意思是这样的,来通过两行简短的代码表情达意吧。

if (str == null || "".equals(str)) {}
if (StringUtils.isEmpty()) {}

就上面这两行代码来说,我的第一选择是使用第二行代码来进行判空操作,因为它的代码量更少——简洁明了,也更不容易出错。

如果我们程序员没有这种(写更少代码的)追求的话,那我们的编程技艺就只会原地踏步,长此以往的后果就是各种避免重复造轮子的第三方类库就不会出现。

就判空操作来说,str == null || "".equals(str) 已经干得非常漂亮了(null 和空字符串都考虑在内了),但性能仍然有待优化,可以使用更高效的 str == null || str.length() == 0 来替代。为什么这么说呢?

因为 Sting 类的 equals() 方法本身是很沉重的,其源码如下所示。

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String aString = (String)anObject;if (!COMPACT_STRINGS || this.coder == aString.coder) {return StringLatin1.equals(value, aString.value);}}return false;
}

str.length() == 0 则简单得多,无非就是两个数值“==”比较。孰优孰劣,高下立见。StringUtils.isEmpty() 的内部就恰好使用的是 str == null || str.length() == 0

对于某些程序员来说,承认这个事实是痛苦的,因为他们是那么的热爱原生。他们争辩说:“那我宁愿使用 str == null || str.length() == 0 也不使用第三方类库的 StringUtils.isEmpty(),因为写原生更直接、更纯粹。”

不,别这样,我耐着性子再劝一句,要理智啊。假如哪天需要把" "(n 个空格)这样的字符串也作为空字符串进行判断呢?难不成要在原生的判断条件中追加 n 个 || " ".equals(str)

还是追求简洁点好啊!因为我们可以把 StringUtils.isEmpty() 换成 StringUtils.isBlank(),该方法已经为我们考虑好了,来看一下源码。

public static boolean isBlank(final CharSequence cs) {int strLen;if (cs == null || (strLen = cs.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if (Character.isWhitespace(cs.charAt(i)) == false) {return false;}}return true;
}

很周全吧?

作为程序员,为我们编写的每一行代码负责任是理所应当的一件事

  • 代码简洁度;
  • 功能的完整度;
  • 执行速度;
  • 编码所花费的时间;
  • 健壮性;
  • 灵活性。

这 6 项指标都值得我们去考量,尽管它们之间有些是对立的,比如说花了一个月的时间实现了一个健壮性非常良好、执行速度也非常快的程序,那可能“编码所花费的时间”(一个月)就有点长了。那怎么样做是值得的呢?

答案只有一个:从简洁开始,再去达其他的标。

代码会随着时间的推移慢慢增加(新的需求、bug 修复),你写的代码越多,bug 藏身的地方就越多,代码编译的速度就会越慢,维护代码的压力也会随之增加。

这是不争的事实。

就好像我们程序员一样,岁月这把杀猪刀不仅会给我们理个发(减少一下发量),还会增加我们的赘肉,如果不坚持锻炼的话,新陈代谢的减缓就会让我们胖成球。

代码是我们程序员创造出来的,如果只在扩展功能的时候追加代码,不在重构的时候精简代码,那么堆叠如山的代码就会像苹果一样腐烂,一个传染俩。

当然了,代码并不是我们的敌人,真正的敌人是谁呢?你往镜子前面一站就恍然大悟了。真正的敌人是我们自己,如果你还热爱编码,就要时刻提醒自己,能少写代码就少写

记得伟大的文学家马克吐温曾说过这样一句话:

我没有时间写一封简短的信,所以我写了一封长的。

写代码和写文字在本质上是一种事情,把代码写得少一点远比写得多一点更不容易,它需要耗费更多的脑力才能完成。

Medium 上的一个作者 Elliot Chance 也曾表达过和我类似的观点,他说:“要分辨两个程序员的优劣,就是给他们一样的时间,越好的程序员写出来的代码越少(当然是可以运行的)。”

越多的代码并不一定代表着认真,有可能代表的是懒惰,懒得去思考,才会写出臃肿的代码。那怎样才能写出更少的代码呢?

  • 首先,要多思考,不要拿到需求就开始敲代码;
  • 其次,多积累经验,张三丰打架都是赤手空拳,武器招数都不要不要的,因为他真的是身经百战啊;
  • 最后,基础扎实,只有把编程语言的本质吃透,比如说上文中提到的 str.length() == 0"".equals(str),如果你没有研究过源码,你压根就不知道它们之间的性能优劣。

不过,有一点我需要提醒大家,假如你的公司的绩效考核是按照代码的数量来评定的,那就当我什么皮也没放过。或者,要不你换一家注重代码质量的公司?

好了各位读者朋友们,以上就是本文的全部内容了。能看到这里的都是最优秀的程序员,升职加薪就是你了

如果你热爱编码,就应该少写代码相关推荐

  1. 入职开发很少写代码_如何简化开发人员入职:将开发环境作为代码

    入职开发很少写代码 Imagine that only a decade ago system administrators deployed, configured, and maintained ...

  2. 为什么程序员要尽量少写代码

    软件开发的一个最基本的事实是写代码,但是最大的误区之一就是把写代码当做工作.当我作为一个程序员第一次参加工作的时候,就犯了这样的错误.老实说,写代码真的是一件特有意思的事,它的强大功能,它的多种作用等 ...

  3. 程序员为什么要少写代码?

    软件开发的一个最基本的事实是写代码,但是最大的误区之一就是把写代码当做工作.当我作为一个程序员第一次参加工作的时候,就犯了这样的错误.老实说,写代码真的是一件特有意思的事,它的强大功能,它的多种作用等 ...

  4. 前端低代码-少写代码实现灵活需求

    低代码开发定义 低代码开发,是一种开发模式,通过图形化用户界面来配置和创建应用软件,而不是用传统模式那样主要依靠手写代码.对应的,提供给开发者的这类低代码开发功能实现的软件,称为低代码开发平台(LCD ...

  5. AlphaCode能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了...

    来源:AI前线 作者:Ben Dickson 译者:王强 策划:冬梅 本文属于我们的人工智能研究论文评论系列,这个系列旨在探讨人工智能领域的最新研究成果. DeepMind 是最新的人工智能研究实验室 ...

  6. Springboot 一行代码实现文件上传 20个平台、少写代码到极致

    又是做好人好事的一天,有个小可爱私下问我有没有好用的springboot文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo地址放在文末了. 文件上传在平常不过的一个功 ...

  7. 多些时间能少写些代码(转自酷壳 – CoolShell.cn)

    我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些. @左耳朵耗子:聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着编 ...

  8. 多些时间能少写些代码

    我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些. @左耳朵耗子: 聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着 ...

  9. 让你少写 1000 行代码的正则全攻略来了!

    说起正则表达式,相信大家都不陌生.在很多程序员的认知中,这东西并不难,在工作中用的也不多,每次用的时候去 Google 搜一搜,然后复制过来改一改,问题就解决了,看起来效率特别高,好像完全没必要专门花 ...

  10. 微服务应用大行其道,我提供一个dto和entity转换工具类,方便大家做转换,少写机械代码,多陪陪家人

    微服务应用大行其道,我提供一个dto和entity转换工具类,方便大家做转换,少写机械代码,多陪陪家人. 该工具类主要是对dozer进行了封装,使用过程代码量极少,废话少说,贴代码了 import j ...

最新文章

  1. tomcat的jsp页面超过65535,导致500报错
  2. ITK:创建另一个图像实例
  3. C++Odd Even Sort奇偶排序的实现算法(附完整源码)
  4. 关于错误 1 error C4996: 'getch': The POSIX name for this item is deprecated.问题解决方式
  5. 2020 CSP-S 游记
  6. 产品入门一——十分钟读懂产品经理
  7. 面试题系列:网络篇夺命连环12问
  8. anaconda安装python包_Anaconda:安装或更新 Python 第三方包
  9. 怎么算掌握了mysql_mysql 需要掌握的重点
  10. 贺利坚老师汇编课程28笔记:在代码段使用数据加个标号start
  11. 最佳的46+14款免费软件
  12. 泛泰A870 CWM Recovery En/Cn合集
  13. Crystal Reports 2008|Crystal Reports 2008破解版下载
  14. Spring技术发展及框架设计
  15. 【Redis】2. 入门篇
  16. 已知直线方程,计算直线对应的向量
  17. 人生的镜像-菌群人生,从出生到死亡的菌群演替
  18. Messari:21年第二季度Web3及NFT报告
  19. 【5G NAS】5G SUPI 和 SUCI 标识符详解
  20. centos查看显卡型号时出现 NVIDIA Corporation

热门文章

  1. 剑侠世界手游服务器维护公告,剑侠世界手游公告_剑侠世界手游开服公告_更新公告_安趣网...
  2. macd底背离的python_Python量化交易之MACD'顶底背离'形态的实现,自动化交易!
  3. 基于springboot点餐系统java web订餐管理平台源码
  4. 苏宁小店助销湘西椪柑 6小时双线销量超60000斤
  5. 人脸关键点检测论文总结
  6. idea清除本地注册信息
  7. python里面pop代码什么意思_python里的pop是什么
  8. UWB室内定位系统,你知道几分
  9. codeforces每日5题(均1500)-第二十二天
  10. 软件测试面试必问问题