字节来的大佬妙用Java8中的Function接口消灭if…else 这代码是真的优雅啊。。

作者: 今晚不改bug早点睡分类: 计算机技术 发布时间: 2024-03-30 16:47:32 浏览:18971 次

字节来的大佬妙用Java8中的Function接口消灭if…else 这代码是真的优雅啊。。

loyc:
不要把原本就应当写在多行里面的逻辑强行写进一行代码里,特别是有实际意义的 if else 本来就应该写成多个代码块 或者多个函数,写一行里面除了写的人感觉自己很cooool,没什么实际用

【回复】函数式编程很有用,看看框架源码就知道了,虽然有缺点但也是瑕不掩瑜,只是从讲课的角度来说用很简单例子来演示会显得没有啥特殊的,重要的是要理解这个思想。
【回复】回复 @清风笑烟雨く : 函数式编程只是一种方式,感觉好就学不好可以不学,技术都有优缺点,没必要一棍子打死,如果当前比较火,就有火的理由
【回复】回复 @DayDay-Happy : 源码也有不喜欢函数式编程的,性能又不是更好,以后的可读性更差,你去用源码的方法写代码,看公司开不开你就完事了,所有变量都用,o,v一个字母表示
winder-skay:
毛用没有,代码就要易读易维护,不是简单复杂化,凸显技术。看下顶极开源项目基本如此

【回复】为啥要易维护?方便老板找人替代你吗[doge]
高傲的心:
函数式编程debug的时候,你都不知道断点跳到哪去了

药丸千岁:
感觉现在的培训机构有点汗流浃背了啊,找不到水什么视频了

【回复】能讲的内容感觉还是很多的,为啥纠结这类孔乙己茴香豆问题。
飛鳥龢鱼:
知其然而不知其所以然,什么样的if else需要干掉呢?说清楚 不要让一些人拿了半截开跑[笑哭]

爱像深蓝:
这里充分证明了up是个外行,知道为什么Function的原型是接口吗?up这种培训班水平的十有八九是不知道的。 在下来讲一下吧,只要认真读过这本书《Java 核心技术》的朋友就应该知道。在java中是没有回调函数,也就是原生不支持方法指针这种回调机制。但java有它实现的方式。因为java是一种完全面向对象的语言,在设计之初就把很多面向过程的特性如Struct、方法指针这种都给去掉了。后来它的发明者也就是c#的发明者发现了这个问题。于是在c#中又重新加回了。即你看下java的基础类型String、int、Boolean然后再看看c#的基础类型String(string是别名)、int、Boolean(bool是别名)你会发现java的原生类类型又搞了一套一毛一样的。而多了一种没有类型的类型基础类型的int和Integer。而在C#里直接给的基础类型就是Struc。你可以看到C#里String是Struct类型。而java的String是一个类。外行会说这没什么关系。但这样说你就是个妥妥的外行而且多半是培训学校出来的。 说回正题在Java中没有回调函数,如何实现回调呢?就是使用接口。 先说个最基础的,为防止百分之八十的所谓java程序员不明白在那里乱喷: 设计者设计一个类 DownloadHelper 下载助手,里面就一个方法Download()下载。 调用者去调用这个类完成下载,先实例化DownloadHelper d = new DownloadHelper()。然后d.Download()完成。这个就算你是培训机构出来的也知道。 那麽如果把它变成异步的怎么办?这时50%的人也许会说个线程,但不知道怎么用,少部分人也许会说Callback 接口来实现。也对但有1%的人知道原理吗?所以大部分学java的人都在那里扯淡。

【回复】大佬牛笔,工作一俩crud偏多的有没有推荐的Java书籍学习下
【回复】这种写法在公司项目见到过,后面是去网上查才明白。书看的少不清楚还有这些写法。
程序员说财经:
作为十年java程序员,最近写前端写得比较多,发现的问题就是这种回调的方法不太容易控制多线程时序。尤其是嵌套了父子组件的生命周期,确实不太明确页面渲染的时序。也尝试使用Promise写法,感觉也有些复杂。相比较而言java就没这个困扰,因为都是同步执行的。就这一点来说我认为js的设计是有点失败的(当然可能当时是有各种客观因素的局限)。

木几工丂:
看来不是我所需要的,我以为是处理大量分支判断简化的代码方式呢,比如替代超过5个else-if或switch-case的情况

【回复】写写业务逻辑就IF ELSE得了,比较好维护
【回复】这就需要用设计模式,如果你看过spring源码,你发现它们使用了大量的设计模式,里面看不见超过两层以上嵌套的if分支
GoalWJW:
迎合JS一些编码习惯,回调函数,一种是写好方法去调用,一种是把方法体写在回调里。最多用到就是这种省下一些控制流程,System.out:: println这种就是forEach把for循环写底层了,具体逻辑是调用的时候再传。看似有区别,其实没区别,攻守易位,一些场景灵活,一些场景就不能用,问题就是要语义化可读性。 没必要强求,当语法糖写一下简洁代码是极好的,但是强行把逻辑拆了,去搞函数式编程,问题很大,反封装特性。都搞了几层架构,不就是把这套东西沉淀在底层么。搞这个除非本身就是提供好的源码,要么有预期会大量的使用。

香草丶丶:
排查现场问题时候,可别异常栈都看不懂了

科技猎手 程序员 科技 经验分享 面试 代码 计算机技术 java Function Java8

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读