【函数式编程实战】(一)Java 演变与函数式编程
前言:
📫 作者简介:小明 java 问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫
🏆 Java 领域新星创作者、阿里云专家博主、华为云享专家🏆
🔥 如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦
本文导读
本文导读为什么要学函数式编程(java 高版本的特性)呢?主要有两点:一是、现在不管大还是中小企业多数使用 8 或以上版本的 jdk 包(笔者写此文的时候 jdk 已经到 18 了),生产代码会有很多 8/11 以及以上的新特性(比如 lambda 表达式、Stream 流、函数式接口)等等,如果你不了解,那么项目里面的代码就看不懂,更无法完成工作;二是,无论是 Spring 源码还是 JIT 的一些新版本的源码,里面大量使用了 Java8 以上的新特性,如果还不懂 Java8 的话,未来源码解析对你来说根本不知道源码这么做的意图。
学什么东西?Lambda 表达式、方法引用、StreamAPI、CollectionAPI、DSL(领域特定语言 domain-specific language)譬如 Comparator、Collector、Optional 类、Local…等时间 API、CompletableFuture、反应式编程、函数式编程技巧和工程中的实例
一、函数式编程思想
首先函数式编程是思想也是一种概念,他是一种新的编程风格,更关注对数据进行什么操作,函数式编程的核心是把函数作为值(例如方法参数中的 lambda 表达式、Stream 中输出流可能是下一方法的输入流),我们可以把他理解为一种设计模式和语法,可以更少的时间,编写更清晰更简洁的代码
二、浅尝 java 的变化
1、函数式编程是种新的编程模式,那什么是函数,在我们代码中函数通常指的是 方法,java8 中新增了函数作为值(这个值是这么理解的,方法定义类,类可以实例化产生值,但是不管是方法还是类本身都不是值,java8 将方法(函数)本身变成了值)
执行结果为:
2、把方法作为值来传递显然是有用简介的,但是类似于嵌套、循环、筛选这类的工具方法 java8 引入了匿名函数或 Lambda,从而不需要定义方法就可以将函数处理
3、java 处理多线程并发(Thread)在 7 之前,如果你的代码有反复的处理,你可能或有 Thread 或者 Runnable 进行多线程处理,在 java8 只有使用 StreamAPI 解决了集合中处理时没有多线程和模板。
三、语言的改变和硬件相关
我们大致了解 java8 的代码发生了什么变化之后,那我们思考为什么要变化?同时为什么 java 的版本变得越变越快?
现在新的计算机都是多核的,不仅仅有一个 CPU(核、处理器),而 java 程序如果只利用其中一个核的话其他的核就浪费了,所以 java8 提供了新的编程风格,这样可以更好的配合计算机工作,于此同时 go、PyThon 等语言层出不穷,java 需要保持自己的竞争力。
语言需要不断改进,因为底层好需要编译编器去编译成汇编语言执行,汇编语言也是不断变化的,例如现在 RISC 和 CISC 两大指令集,在不断变化,而汇编器去操作汇编将其转化为 0101 的机器语言,需要不断的适应硬件的更新,这样才能满足程序员的要求。
版权声明: 本文为 InfoQ 作者【小明Java问道之路】的原创文章。
原文链接:【http://xie.infoq.cn/article/f51cd858fb9689c4208edaf2d】。文章转载请联系作者。
评论