曾经用过一点的函数式编程

2024-06-12 23:32

本文主要是介绍曾经用过一点的函数式编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初识函数式编程

刚来公司,打开项目,看到这种写法觉得比较新奇

 

因为我们一般定义一个方法,参数要么是简单参数,要么是对象,第一次看到是一个Function,就这样初识了函数式编程。

点进去Function,是java.util.function下的类

官方解释是Represents a function that accepts one argument and produces a result,表示接受一个参数并生成结果的函数。

后来还看到这种写法,觉得既新奇又有点表示不解

 传入一个Supplier

也是java.util.function下的类,官方解释是表示结果的供应商。

后面逐渐发现在某些人的代码中,这种写法比较多见。经询问,这是我们架构同事比较常用的写法。

还有BiFunction,和Function差不多,调用apply

BiConsumer,官方解释是表示接受两个输入参数而不返回结果的操作。初步理解是通过调用accept来设置或接收参数的操作。用得最少,不是太懂。感兴趣的朋友可以网上查一下。

以上两个也是java.util.function下的类 

自己的运用情况:

我自己不太用这种写法,主要是之前没用过,不太习惯,不太会想到这种用法,就算用也是一些大家比较常见的用法。

思考和回顾:

1.函数式编程有什么特点

函数式编程是java 1.8以后的特性。函数式编程模型,需要定义提供方,再是调用方,可能有点类似生产者-消费者模式。个人理解的话,函数式编程可能比较灵活一些,有点面向过程编程思想的感觉,也不知道理解的对不对。我发现在项目中用函数式编程的场景也不太固定,或许也是方便吧。

2.Function和Supplier有什么区别

个人理解的话,因为用得不多,机制和源码也没怎么了解,从代码上看Supplier可以调用Get方法获取结果,而Function可以调用apply获取结果,感觉Supplier是更多上一层的

可以通过lamda表达式声明Supplier,lamda右边是也是一个方法。

声明Function就相对简单简单一些,任何一个外部的,在接口中的方法可以是Function的。

3.函数式编程有什么应用场景

应用场景的话,个人感觉可能在定义一些通用的行为规范上可能用得比较多一点,像这边大部分是一些通用的类,比如BaseController,基础组件或工具类,比如公共异常util等。

两年过去了,感觉自己还是不太习惯用吧。

其实每一家公司都有自己的一些编程风格,这种编程风格一般是由公司的总监、架构师或开发负责人决定的,就像《亮剑》中说的,一个组织的风气一般是有组织的头头决定的,这种风格有一定的代表性,就像上一份公司常见的函数式编程,也有一定的局限性,是说可能换一家公司可能就不喜欢用函数式编程了。

真正是自己的,是要理解它的用法,而不是只直到这么个东西。

以上如果有哪里写得不对的地方,欢迎指正。

这篇关于曾经用过一点的函数式编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055653

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3