【Java】基础36:函数式编程
今天是我自学Java的第35天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:
现在直播一直都很火,今天我们就用Java代码简单地模拟一个直播案例,以此来一步步说明什么叫函数式编程。
不要看这个名字好像挺难懂的样子,其实很简单,两分钟时间即可看完。
一、直播间案例
现在有一个直播平台,它如何管理那些想直播的人?很简单,制定规则就好了,在Java里面接口的作用就是制定规则。
①有一个接口叫LiveRoom,就是直播间。
你想要直播?很简单,实现直播间接口就好了,实现了你就能开个直播间直播了。
②LiveRoom接口里有一个抽象方法叫live()
表示的就是直播间直播的什么内容?
你播游戏也行,播唱歌也行,播吃饭,播睡觉都可以,所以我用一个抽象方法表示直播的内容,你具体播什么我不清楚,都可以。
你实现我这个接口了,必须要重写live方法。
简单地理解就是,你必须得告诉我你直播什么,我才能让你直播,不然你不能有直播间。
规则制定完毕,好,现在有一个直播间,在玩游戏,一看直播间名字,哦,叫刘小爱。
这个用Java代码如何表现出来?
1.最常规代码
①创建一个刘小爱类
实现LiveRoom接口,刘小爱既然能直播,肯定是实现了直播接口的。
②重写接口里的live方法
刘小爱直播的是啥?哦,原来是魔兽rpg游戏。
③创建刘小爱对象
将刘小爱对象作为参数传入method方法。
④method方法
直播间会调用live方法,输出正在直播什么内容。
所以运行代码,控制台就会输出:“玩魔兽rpg游戏”。
现在问题来了,代码能不能简化?
可以的,使用匿名内部类就好了。
2.匿名内部类
我既然是看直播,直播间名字叫啥重要么?
直播间叫刘小爱也好,叫刘大爱也罢,哪怕是叫刘老爱都无关紧要,我是要看直播的内容,那我完全可以不用创建刘小爱类。
代码如下:
⑤匿名内部类
既然名字不重要,直播间没有名字了,那就直接用父接口LiveRoom的名字代替就好了。
new LiveRoom(){},这表示的就是LiveRoom的子类(实现类)对象,也就相当于是常规方法中的刘小爱对象。
匿名内部类省略了类名,不用创建一个实现类,所以更简单。
那还能不能再简化?
可以的,也就是今天的重点,函数式编程。
二、函数式编程
函数,这个概念我们在数学里面我们就接触过。
y=f(x)(y=x+1)这就是函数的格式,其中f是函数名,x是变量,y是函数值,还有定义域,值域什么的。
你发现没有,Java中的方法其实就是一个函数:
方法名不就是函数名么?参数也就是函数中的变量,返回值也就是函数值?它们本质上是一样的的,只不过叫法不一样,并且在有的编程语言中方法也就叫函数。
前面无论是最常规代码还是匿名内部类,它们都有一个重点:LiveRoom接口中的live方法,也就是重写后的方法。
函数式编程就是依据这个方法来的:
⑥Lambda表达式
lambda,中文翻译过来就是拉姆达,还记得数学中:λ这个字符么?说的就是它。
lambda表达式表示的是什么?本质上就是LiveRoom接口中的live方法。
没有参数,就用一个()表示;
有参数的话,就将参数写在()里面;
输出的内容为重写后的方法体;
如果有返回值,就用return返回;
如果没有返回值,return可以省略。
什么叫函数式编程?
就可以理解成用什么参数执行了一件什么事情,这就是函数式编程,它是匿名内部类进一步的简化,可以让代码更加的简洁。
但它有一个使用的前提,接口得是函数式接口。
什么叫函数式接口?
有且仅有一个抽象方法需要被重写的接口。
这个怎么理解?很简单,函数式编程和匿名内部类相比,它省略了啥?
它省略了接口中的方法名,为什么可以省略?
因为就只有一个方法,那就算省略了方法名字,也知道是用的那个方法。
这就好比你是家里的独生子,那你爸妈回来叫你宝贝,叫你甜心,叫你小兔崽子,别人都知道你爸妈是在叫你。
但如果你还有个弟弟,你爸妈再这么叫你,别人就搞不清楚你爸妈到底是在叫你,还是在叫你弟弟了。 关于函数式编程暂时就先介绍到着,以后有经典的笔试题会用代码再次演示,毕竟实战才是王道 。 总结: