《Java 8函數語言程式設計》選讀:為什麼要給Java 8中加入函數語言程式設計?
本文是Java 8 Lambdas 第一章部分譯稿,發上來讓社群的朋友們先睹為快。
在開始我們的lambda表示式之旅前,起碼得知道它因何而生。本章將會介紹lambda表示式產生的原因,以及作者寫這本書的動機和全書的組織結構。
1.1 為什麼需要再次修改Java?
1996年1月,Java 1.0釋出了,此後計算機程式設計領域發生了翻天覆地的變化。商業發展需要更復雜的應用,大多數程式都跑在更強大的裝備多核CPU的機器上。帶有高效執行期編譯器的Java虛擬機器(JVM)的出現,使得程式設計師將精力更多放在編寫乾淨、易於維護的程式碼上,而不是思考如何將每一個CPU時鐘、每一位元組記憶體物盡其用。
多核CPU的出現成了“房間裡的大象”,無法忽視卻沒人願意正視。演算法中引入鎖不但容易出錯,而且消耗時間。人們開發了java.util.concurrent
包和很多第三方類庫,試圖將併發抽象化,用以幫助程式設計師寫出在多核CPU上執行良好的程式。不幸的是,到目前為止,我們走得還不夠遠。
那些類庫的開發者使用Java時,發現抽象的級別還不夠。處理大資料就是個很好的例子,面對大資料,Java還欠缺高效的並行操作。Java 8允許開發者編寫複雜的集合處理演算法,只需要簡單修改一個方法,就能讓程式碼在多核CPU上高效執行。為了編寫並行處理這些大資料的類庫,需要在語言層面上修改現有的Java:增加lambda表示式。
當然,這樣做是有代價的,程式設計師必須學習如何編寫和閱讀包含lambda表示式的程式碼,但是,這不是一樁賠本的買賣。與手寫一大段複雜的、執行緒安全的程式碼相比,學習一點新語法和一些新習慣容易很多。開發企業級應用時,好的類庫和框架極大地降低了開發時間和成本,也掃清了開發易用且高效的類庫的障礙。
對於習慣了物件導向程式設計的開發者來說,抽象的概念並不陌生。物件導向程式設計是對資料進行抽象,而函數語言程式設計是對行為進行抽象。現實世界中,資料和行為並存,程式也是如此,因此這兩種程式設計方式我們都得學。
這種新的抽象方式還有其他好處。很多人不總是在編寫效能優先的程式碼,對於這些人來說,函數語言程式設計帶來的好處尤為明顯。程式設計師能編寫出更容易閱讀的程式碼——這種程式碼更多地表達了業務邏輯,而不是從機制上如何實現。易讀的程式碼也易於維護、更可靠、更不容易出錯。
在寫回撥函式和事件處理器時,程式設計師不必再糾纏於匿名內部類的冗繁和可讀性,函數語言程式設計讓事件處理系統變得更加簡單。能將函式方便地傳遞也讓編寫惰性程式碼變得容易,只有在真正需要的時候,才初始化變數的值。
Java 8還讓集合類可以擁有一些額外的方法:預設方法。程式設計師在維護自己的類庫時,可以使用這些方法。
總而言之,Java已經不是你祖父當年使用的Java了,嗯, 這不是件壞事。
1.2 什麼是函數語言程式設計?
一千個人心中,就有一千種對函數語言程式設計的理解。但其核心是:在思考問題時,使用不可變物件和函式,函式將一個值經過處理,對映成另一個值。
不同語言社群的人總是傾向於對自己語言的特性敝帚自珍。現在談Java程式設計師如何定義函數語言程式設計還為時過早,但是,這根本不重要!我們關心的如何寫出好程式碼,而不是符合函式程式設計風格的程式碼。
在本書中,我將重點放在函數語言程式設計的實用性上,包括那些可以被大多數程式設計師理解和使用的技術,幫助他們寫出易讀、易維護的程式碼。
相關文章
- Java 函數語言程式設計Java函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- Java8的函數語言程式設計Java函數程式設計
- 重識Java8函數語言程式設計Java函數程式設計
- Java8 新特性 —— 函數語言程式設計Java函數程式設計
- Java8函數語言程式設計應用Java函數程式設計
- 書推薦《Java 8函數語言程式設計》Java函數程式設計
- 淺談Java 8的函數語言程式設計Java函數程式設計
- JavaScript函數語言程式設計之為什麼要函數語言程式設計(非嚴謹技術層面的扯淡)JavaScript函數程式設計
- 什麼是函數語言程式設計函數程式設計
- 《Java 8函數語言程式設計》選讀:第一個Lambda表示式Java函數程式設計
- 函數語言程式設計函數程式設計
- 隨便聊聊 Java 8 的函數語言程式設計Java函數程式設計
- 使用 Java 8 函數語言程式設計生成字母序列Java函數程式設計
- Java 函數語言程式設計的前生今世Java函數程式設計
- Java 函數語言程式設計(三)流(Stream)Java函數程式設計
- Java函數語言程式設計知識分享!Java函數程式設計
- 《Java8函數語言程式設計》讀書筆記---類庫Java函數程式設計筆記
- 快速掌握Java8 Stream函數語言程式設計技巧Java函數程式設計
- 函數語言程式設計,真香函數程式設計
- javascript函數語言程式設計JavaScript函數程式設計
- 初探函數語言程式設計函數程式設計
- 函數語言程式設計初探函數程式設計
- JavaScript 函數語言程式設計JavaScript函數程式設計
- Java技術分享之函數語言程式設計!Java函數程式設計
- Java技術分享之函數語言程式設計Java函數程式設計
- 淺談函數語言程式設計與 Java Stream函數程式設計Java
- Java 函數語言程式設計(二)Lambda表示式Java函數程式設計
- Java 函數語言程式設計(一)初識篇Java函數程式設計
- Java 帝國之函數語言程式設計(上)Java函數程式設計
- 【譯】你的程式語言能做到這個嗎?(為什麼要學函數語言程式設計)函數程式設計
- 《Java8函數語言程式設計》讀書筆記---收集器Java函數程式設計筆記
- java8函數語言程式設計筆記-科裡化Java函數程式設計筆記
- java8函數語言程式設計筆記-延遲性Java函數程式設計筆記
- 函數語言程式設計雜談函數程式設計
- 初見函數語言程式設計函數程式設計
- RAC的函數語言程式設計函數程式設計
- JavaScript 函數語言程式設計(二)JavaScript函數程式設計