为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很 6,来欣赏一下吧。

IntStream.range(1, 5).boxed().map(i -> { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"; else return "to You"; }).forEach(System.out::println);

我虽然拥有 10 年的 Java 编程经验,但说实话,很惭愧,这段代码就好像一块板砖拍在我脑袋上,有点懵逼。Lambda 表达式我是学过的,Stream 流我是学过的,forEach() 方法我也是学过的,但把这些知识点全部塞到一行代码中,我还是有点消化不良。

我总觉得这行代码不如换成老式的语法(Java 7 之前)来写,就像下面这样:

for (int i = 1; i < 5; i++) {System.out.println("Happy Birthday " + (i == 3 ? "dear NAME" : "to you"));
}

哇,beautiful code,简洁又明了!不仅我能看得懂,就连刚入门的 Java 小白都能看得懂。要知道,代码是写给人看的,假如只有自己看得懂,只有自己觉得很 6,而其他人看起来云里雾里的,就不一定是好代码,尽管好像是行走在技术的前沿。

俗话说得好,“能力越大,责任越大”。Java 8 为我们提供了强大的能力,它的新特性是划时代的(Java 8 之后的版本中新特性都不够亮眼),包括 Lambda 表达式和 Stream 流,我们通过它们可以写出简洁又高效的代码。打个不恰当的比喻,Java 8 之前,开发者驾驶的是桑塔纳,Java 8 之后,开发者驾驶的是法拉利。

但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。

在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见:

Excessive use of Guava’s functional programming idioms can lead to verbose, confusing, unreadable and inefficient code. … when you go to preposterous lengths to make your code “a one-line”, the Guava team weeps.

应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。

我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。

我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。

Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类,搞起来");}
});
t1.start();// 优化后Thread t2 = new Thread(() -> {System.out.println("Lambda 表达式,搞起来");
});
t2.start();

你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。

举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。

好了,我亲爱的读者朋友,以上就是本文的全部内容了,能看到这里的就是最优秀的程序员。原创不易,❤️ 不要忘记留下你学习的脚印 [点赞 + 收藏 + 评论]

如果觉得文章对你有点帮助,请微信搜索「 沉默王二 」第一时间阅读,回复【666】【1024】更有我为你精心准备的 500G 高清教学视频(已分门别类),以及大厂技术牛人整理的面经一份,本文源码已收录在码云,传送门~

你以为这样写Java代码很6,但我看不懂相关推荐

  1. Eclips写Java代码和CSS、Javascript、Html代码设置代码自动提示功能

    按照我的方法设置后用Eclipse编写Java代码和前端代码(Html.CSS.JS)都可以自动提示代码.赶紧去试试吧. 1.打开Eclipse软件,点击Windows→Preferences→Jav ...

  2. Jupyter 配置 Java环境,写Java代码,测试成功

    本次简单诉说下怎么通过jupyter安装iJava,写Java代码. 安装Java的不说了 我使用的是Java15 然后去:https://github.com/SpencerPark/IJava/r ...

  3. java el表达式 导航规则_诺禾:在jsp里面如何不写java代码展示数据(EL表达式的使用)...

    EL表达式可以简化jsp中写的java代码 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码展示数据(EL表达式的使用) 在jsp里面如何不写java代码 ...

  4. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项

    写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...

  5. vscode写java没有提示_VS Code报错Language Support for Java(TM)插件显示需要JDK11 写java代码没有提示...

    鉴于IDEA的打开速度(电脑的垃圾),平常刷LeetCode都是在VSCode上,结果这几天老是打开给我报错 Java 11 or more recent is required to run. Pl ...

  6. 如何在jsp里面写java代码

    jsp和html相比,最显著的优势就在于,jsp里面可以写java代码,但是html中不能. 那么如何在jsp中写java代码呢! jsp中写java代码有如下三种方式: <%! %>,这 ...

  7. jsp里写java代码报错,jsp里写java代码报错

    jsp里写java代码报错 [2021-02-11 06:42:03]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/ ...

  8. vim java 编程_你也用Vim写Java代码?

    献给所有曾试图写Java而痛苦挣扎的Vimers, 请不要害怕, 我也是你们的一员 序 文章源起于segmentfault论坛中的一个问题, 由于回答的有点尽性, 便转为文章. 题主应该是个Vim初学 ...

  9. 同事说,我写Java代码像写诗

    文章来源:http://33h.co/kntu3 前几天空闲时间写了一遍关于平时自己写代码的一些习惯,这里跟大家分享一下. 定义配置文件信息✦ 有时候我们为了统一管理会把一些变量放到 yml 配置文件 ...

最新文章

  1. vPower系列1: vMotion-没有vMotion,虚拟化只是玩具
  2. 高速学会Mac上托管代码到github(具体解释)
  3. 求两个数组的最长重复子数组 Maximum Length of Repeated Subarray
  4. [GXYCTF2019]CommonModulusAttack
  5. 导航模块自带的rtk算法_这款百元国产RTK板卡要改变高精度定位市场格局吗?
  6. 实现strcmp库函数的功能
  7. CSS学习笔记--CSS语法与选择器
  8. ROS笔记(13) 记录与回放数据
  9. 编译原理(第3版)陈火旺——课后习题答案——第四章
  10. java jxls_jxls2.3-简明教程
  11. C语言·abs()函数
  12. 数学建模Latex简易模板
  13. 初创期企业运营必备手册-工具包-绩效考核方法工具包
  14. 【短信发送】实现腾讯云发送短信功能--工具类和SpringBoot配置两种方法实现
  15. QLU_ACM 2021 专题训练(一)题解 [暴力、排序、贪心、二分]
  16. C++ 函数:accumulate()
  17. C语言编写程序,从键盘输入三角形的三条边,判断它们是否能构成等腰或直角三角形。
  18. 【机器人识别抓取】基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计
  19. C语言--判断此年份是否是闰年
  20. 小米MIX FOLD折叠屏上手体验:MIUI大更新 满血的掌上PC模式“有点狠”

热门文章

  1. 七夕给女朋友准备的小惊喜网站制作(html+css+js)
  2. ppst 技术视频——oracle 性能优化
  3. Flash AS2.0脚本语言
  4. steam游戏搬砖项目,不错的副业,具体操作方法
  5. 后浪程序猿 996 摸鱼求生指南
  6. Keras笔记(三):目标函数objectives /loss
  7. 非财务人员的财务培训教(二)------如何评价公司/部门经营业绩
  8. zero-shot基础入门
  9. python语言的变量随时命名随时_计算机二级
  10. 《设计模式之禅》之六大设计原则