日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

您必须学习Java 8的函数式编程吗?

發布時間:2023/12/3 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 您必须学习Java 8的函数式编程吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最近一直在研究Java 8,并掌握了Manning出版的“ Java 8 In Action” 。 讓我印象深刻的第一件事是Java 8的獨特銷售主張是函數式編程。 函數現在是一流的變量,您可以像int或String一樣在代碼中傳遞它們。 這是一個很大的變化。

近年來,功能語言似乎變得越來越流行,并且它們沒有盡頭可供選擇。 現代函數式編程語言的例子包括Clojure,JavaScript,Scala,甚至是1980年代后期發明的Erlang都重新流行了。

那么,為什么會有這種方向變化? 您可能會提出幾個原因,但我們首先要假設行業最佳實踐會隨著時間的推移而變化,甚至最流行的語言也有一天會不受歡迎。 我想如果您還年輕的話,會有一天您會回頭說“記得我們以前使用Java的時候”嗎? 在探討為什么會有這種變化之前,讓我們回顧一下1980年代到這里的方式……
根據Wikipedia的說法,IBM PC于1981年8月12日發布。第一批PC配備了BASIC 1,盡管帥哥很快對此感到厭倦,并轉而使用Borland的Turbo Pascal。 Turbo Pascal的冷靜并沒有持續太久,因為微軟收購了Microsoft C(或MSC),后者很快成為事實上的標準。 這很酷,因為如果您很聰明,則可以使用int 21H , int 10H和int 14h以及其他int 10H直接訪問硬件,并且如果可以記住哪個中斷做了什么,那么您就和我一樣老2

IBM PC之前還有其他計算機,包括Apple II,Commodore Pet等,但是IBM PC是用于商業應用程序的“成熟” PC。 我記得我曾嘗試為我在1985年所做的一個項目購買一個,它們要花上千英鎊,而你卻不能為了愛情或金錢而得到一個,每個人都想要一個。 但是,我離題了。


在1980年代后期,出現了Microsoft Windows SDK,這是一個基于C的SDK,自從平鋪Windows 1以來就出現了(顯然,Microsoft在Windows 1中沒有使用重疊的窗口,因為它復制了Apple的Macintosh并可能侵犯了他們的專利-盡管據稱Apple竊取了Xerox Parc為Mac設計的想法,盡管我不確定這是多么真實)。 該SDK確實在Windows 2中盛行,為回調,基于消息的編程引入了世界。 他們據稱是從Unix上的X-Windows和Motif偷走的。


在1990年代中期左右語言成為面向對象的 ; 發明了類來將方法和數據聯系在一起,引入了數據隱藏和封裝的概念。 “ C”變為“ C ++”,如果此時您使用的是Windows SDK,則切換到Microsoft基礎類; SDK的OO包裝器。 這種變化被視為一件好事。 舊的基于函數的語言的一個主要問題是,您可以在代碼庫中的任何位置分配全局變量,然后隨時使用任何函數對其進行更改。 顯然,這在很多系統中造成了重大問題,因為您不確定更改全局變量的狀態不會在應用程序的某個遙遠角落引入錯誤。 事實語言C的另一個主要問題是您負責分配和釋放內存,并且如果內存指針是全局的,那么在訪問它們時,您不能100%地確定該指針仍然有效,如果不是, t ...你墜毀了。

伴隨著面向對象的語言出現了面向對象的方法論,并在1990年代后期使用UML達到了頂點。 這是Booch方法 , James Rumbaugh的 OMT和Ivor Jacobsen的 OOSE的融合,并且在設計軟件時是必不可少的。 各種各樣的工具都可以用來記錄和傳達您的設計,并且從經驗來看,其中一些工具的質量非??梢?#xff0c;這就引出了一個問題:開發人員是否真的在使用UML編寫他們的UML程序? 如果是這樣,那么這些產品對于UML來說并不是一個好廣告。

如今,您沒有看到使用UML的組織那么多,盡管當我需要直截了當設計時,我仍然會這樣做。 我的UML工具的首選是,并且永遠是鉛筆和紙 。 這很簡單,而且可以正常工作。

最后,在我的編程簡要歷史中,最后是Java。 Java最初于1995年發布,幾年后開始流行,它基于改進C ++的思想。 這主要是因為它在自己的虛擬機上運行,??該虛擬機為您處理內存分配和釋放。 它已成為面向對象語言的事實上的標準。

關于這個大致組成的時間表的事情是命令式編程的基本概念。 總而言之,匯編語言產生了C,C導致了C ++和OO,而C ++和OO導致了Java –所有這些都是必須的。 Wikipedia很好地概述了命令式編程,因此我不會對其進行詳細介紹,但我將命令式編程概括為具有函數和可變狀態的編程,這意味著您可以擁有實例變量和全局變量。

函數式編程與命令式編程有何不同? 主要思想是函數是數據,就像整數和字符串一樣。 算法是根據函數調用實現的( while不存在for循環,而使用遞歸),并且變量始終是局部的。

您可能會誤以為,因為它們包含函數的概念并且沒有類,所以C和Turbo Pascal之類的語言都是函數式編程語言。 它們不是,它們是命令式編程語言,因為它們具有狀態數據。

那么,有什么變化? 常見的答案是硬件發生了變化,這是由Erlang開發人員提出的,而在Manning的Java 8書中可以找到。 現在,至少在服務器機房中可以找到的“計算機”是一種復雜的多處理器,多核事務,其存儲容量為TB。 以HP Proliant DL580 G8服務器為例; 它最多具有四個處理器,每個處理器最多可以具有15個64位內核。 這是巨大的,特別是與原始IBM PC上的原始,革命性的16位Intel 8086相比。 假設您正在運行Unix,并且運行了top命令,那么最大處理器使用率將為6000%。 鑒于機器功能的急劇增長,我們的軟件開發人員需要能夠支持它們的語言,從而使我們能夠輕松地使用所有這些并發處理能力,而這正是功能編程的出現。

在命令式編程中,您可以具有實例變量,全局變量和可變狀態。 可以在線程之間共享這些資源,盡管共享這些資源在同步和鎖定方面既昂貴又效率低下。 這也是相當緩慢且困難的事情,因為您必須避免死鎖和其他類似問題。 函數式編程消除了所有這些問題,因為它消除了實例變量和狀態的所有繁瑣處理。 這意味著您不必費心進行鎖定和同步,線程或進程(隨便稱呼它們)可以彼此獨立。

那是理論,但是它可以接受審查嗎? 別忘了,有可能編寫出良好的多線程程序,這些程序可以有效地使用具有命令性Java 6或7的大型多核和多處理器計算機的許多內核。就像函數式編程語言一樣,您必須考慮一下自己所要做的事情。為此,請設計合適的設計并使用業務“最佳實踐”執行它。 僅僅因為Java 6或7是命令性語言,您不必在線程/進程之間共享數據并使用同步和鎖定,這僅是設計問題。 邏輯上的結論是,您可以不使用函數式編程而做,這可能導致函數式編程語言流行的真正原因:人們喜歡使用它們。

因此,您可以說功能語言是“最新的東西”。 狂熱,他們是新潮,一種時尚。 我必須強調,軟件開發中的“時尚”不一定是一件壞事,也不是什么新鮮事。 如果您回到上面的歷史,您會發現時間軸上充滿了趨勢和瘋狂:在Turbo Pascal和BASIC上采用了“ C”,范式轉移到了Object Orientation,甚至是通過Java轉移到Java它只需編譯一次即可在任何地方運行。

您必須學習Java 8的函數式編程嗎? 幾年后問我...


1由于我記憶猶新,因此確保此博客中的所有歷史事實都不準確。
2如果我錯了,請糾正我,但是int 21H = MSDOS函數, int 10H =直接屏幕訪問,并且int 14H =串行I / O

翻譯自: https://www.javacodegeeks.com/2014/05/is-it-imperative-that-you-learn-functional-programming-with-java-8.html

總結

以上是生活随笔為你收集整理的您必须学习Java 8的函数式编程吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。