你以为这样写代码很6,但我看不懂

来源 | 沉默王二

责编| Carol

封图| CSDN│下载于视觉中国

为了提高 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();

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

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

《原力计划【第二季】- 学习力挑战》正式开始!即日起至 3月21日,千万流量支持原创作者!更有专属【勋章】等你来挑战

推荐阅读:如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!
大数据成长之路:谈谈那些必须学习的Linux基础知识
无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
国产 14nm 迎曙光,进口荷兰光刻机顺利入厂!
从哈希函数、哈希冲突、开散列出发,一文告诉你哈希思想与哈希表构造到底是什么!
前端 Webpack 工程化的最佳实践
真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在闲鱼,我们如何用Dart做高效后端开发?

背景 像阿里其他技术团队以及业界的做法一样&#xff0c;闲鱼的大多数后端应用都是全部使用java来实现的。java易用、丰富的库、结构容易设计的特性决定了它是进行业务开发的最好语言之一。后端应用中数据的存储、访问、转换、输出虽然都属于后端的范畴&#xff0c;但是其中变…

解决 mysql>com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12073681 > 4194304)

com.mysql.jdbc.PacketTooBigException: Packet for query is too large 异常解决办法&#xff1a; 原因&#xff1a; 查询出的数据包过大&#xff0c;默认情况下mysql 的字段容量不够装&#xff0c;所以抛出此异常 解决办法&#xff1a; 第一步&#xff1a;首先通过SQLyog客…

MySQL数据库无完整备份删库,除了跑路还能怎么办?

来源 | 阿丸笔记责编| Carol封图| CSDN│下载于视觉中国“删库跑路”这个词儿&#xff0c;经常被挂在嘴边当玩笑&#xff0c;是因为大家都知道&#xff0c;一旦真的发生这样的事情&#xff0c;企业损失是无比惨重的。本文作者为 CSDN 博客的一位博主&#xff0c; 从他的描述中得…

区块链和大数据一起能否开启数据完整性的新纪元?

作者 | Vijay Singh Khatri译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国每当提到区块链一词时&#xff0c;许多人都会将其与比特币等加密货币联系起来。这项技术通过加快交易速度、提供隐私和透明以及其他更多功能&#xff0c;确实改变了虚拟货币的世界。但是&…

带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后

“我的花名是改之&#xff0c;不是‘有则改之无则加勉’的改之&#xff0c;而是‘杨过&#xff0c;字改之’的那个改之。”一见面&#xff0c;他对自己花名的介绍&#xff0c;就让人耳目一新。至于为什么要用杨过的字给自己起名&#xff0c;他也毫不扭捏地坦诚相告&#xff1a;…

整理了Kafka的一些常用工具,建议收藏备用!| 博文精选

作者 | 犀牛饲养员责编 | 徐威龙封面付费下载于视觉中国本文主要列举一些 Kafka 的常用工具&#xff0c;以及举了一些例子来帮助理解。有需要的小伙伴&#xff0c;可以 Mark 起来再看。环境以下的操作都是基于kafka_2.11-2.2.0工具新建topicbin/kafka-topics.sh --create --zoo…

阿里的初感知

很荣幸能加入阿里这个大家庭&#xff0c;在这短短的一个月里&#xff0c;阿里的一些不同让我印象深刻。 owner精神 入职第一天&#xff0c;上午进行了合同签订和简单的入职培训&#xff0c;下午就领了电脑设备到了办公区。 在电梯里&#xff0c;恰巧遇到了面试过我的同学&…

两大图灵奖得主点赞中国用AI检测新冠,AI还能做什么?

作者 | CV君来源 | 我爱计算机视觉封图| CSDN│下载于视觉中国在这次新冠肺炎疫情肆虐的时候&#xff0c;AI 成为对抗疫情的亮点&#xff0c;前几天两大图灵奖得主 Yoshua Bengio 和 Yann LeCun 在对比中美两国面对疫情处理时&#xff0c;特别点赞了我国企业使用深度学习检测新…

首次披露!阿里线下智能方案进化史

阿里妹导读&#xff1a;AI 技术已经从互联网走向零售、汽车、银行等传统行业。受限于延时、成本、安全等多方面的限制&#xff0c;单一的云解决方案往往不能满足场景需求。线下智能方案逐步成为了智能化过程中重要的一环&#xff0c;今天&#xff0c;我们就一起来了解这一环&am…

同方服务器操作系统安装,同方云服务器安装使用手册

同方云服务器安装使用手册 内容精选换一换制作Docker镜像&#xff0c;有以下两种方法。快照方式制作镜像(偶尔制作的镜像)&#xff1a;在基础镜像上&#xff0c;比如Ubuntu&#xff0c;先登录镜像系统并安装Docker软件&#xff0c;然后整体制作快照&#xff0c;即可得到所需软件…

蚂蚁金服面对亿级并发场景的组件体系设计

5 月 6 日&#xff0c;InfoQ 主办的 QCon 2019 全球软件开发大会在北京举行。蚂蚁金服技术专家吕丹&#xff08;凝睇&#xff09;在大会上做了《蚂蚁金服面对亿级并发场景的组件体系设计》的分享&#xff0c;我们根据演讲整理如下&#xff1a; 今天&#xff0c;我主要想和大家…

聚焦效率与目标差距,数据才是远程办公的内核!

作者&#xff5c;帆软数据应用研究院 新冠肺炎疫情将远程办公推向了春节后的热度高峰&#xff0c;引爆了远程移动办公应用市场。在“不出门&#xff0c;不聚集”的战疫要求下&#xff0c;远程办公成为企业减小损失、复工过渡的首选。 然而在众多企业如火如荼开展远程办公的同…

“大团队”和“敏捷开发”,谁说不可兼得?

阿里妹导读&#xff1a;当小团队的产出跟不上业务需要&#xff0c;团队就面临规模化的问题。从1个团队到3个团队&#xff0c;仍可以通过简单的团队沟通保持高效协作。当产品复杂到需要5个以上团队同时开发时&#xff0c;我们需要一定的组织设计来保证团队间的顺畅协作&#xff…

英雄联盟祖安服务器要维护多久,祖安玩家的春天!英雄联盟将回归队内语音,娱乐玩家遭殃了?...

英雄联盟之所以能一直保持这么高的人气&#xff0c;就是因为丰富的游戏内容&#xff0c;无论是地图资源、英雄 、符文搭配和出装选择&#xff0c;每隔一段时间就会来一个大革新&#xff0c;而今年英雄联盟更是迎来了史无前例的大更新&#xff0c;装备系统大改&#xff0c;装备界…

plsql不加date

nls_date_format YYYY-MM-DDnls_timestamp_format YYYY-MM-DD NUMBER_OF_PROCESSORS 8

阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云

5月21日&#xff0c;阿里云PolarDB发布重大更新&#xff0c;提供传统数据库一键迁移上云能力&#xff0c;可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云&#xff0c;最快数小时内迁移完成。据估算&#xff0c;云上成本不到传统数据库的1/6。目前&#xff0c;…

在加州最古老的监狱教课是种什么样的体验?

彼得斯登&#xff08;Peter Stern&#xff09;是阿里巴巴战略投资部的一名洋小二&#xff0c;是办公室出了名的“空中飞人”。 斯登一年中大部分时间都在各大洲飞来飞去——但无论多忙&#xff0c;每个月他都会去圣昆丁监狱上课。 不好走的“最后一里路” 圣昆丁州立监狱是加…

BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

一、引言 时间到了2019年&#xff0c;数据库也发展到了一个新的拐点&#xff0c;有三个明显的趋势&#xff1a; 越来越多的数据库会做云原生(CloudNative)&#xff0c;会不断利用新的硬件及云本身的优势打造CloudNative数据库&#xff0c;国内以阿里云的Cloud HBase、POLARDB…

概率中的 50 个具有挑战性的问题 [05/50]:正方形硬币

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

从HelloWorld看Knative Serving代码实现

概念先知 官方给出的这几个资源的关系图还是比较清晰的&#xff1a; 1.Service: 自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流量使用最新的revision&#xff0c;还是固定的revision。 2.Route&#x…