今天是我自學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可以省略。什麼叫函數式編程?
就可以理解成用什麼參數執行了一件什麼事情,這就是函數式編程,它是匿名內部類進一步的簡化,可以讓代碼更加的簡潔。
但它有一個使用的前提,接口得是函數式接口。
什麼叫函數式接口?
有且僅有一個抽象方法需要被重寫的接口。
這個怎麼理解?很簡單,函數式編程和匿名內部類相比,它省略了啥?
它省略了接口中的方法名,為什麼可以省略?
因為就只有一個方法,那就算省略了方法名字,也知道是用的那個方法。
這就好比你是家裡的獨生子,那你爸媽回來叫你寶貝,叫你甜心,叫你小兔崽子,別人都知道你爸媽是在叫你。
但如果你還有個弟弟,你爸媽再這麼叫你,別人就搞不清楚你爸媽到底是在叫你,還是在叫你弟弟了。
關於函數式編程暫時就先介紹到著,以後有經典的筆試題會用代碼再次演示,畢竟實戰才是王道 。
總結: