當 全世界的語言 都往 Functional Programming 發展
今年參加 Java Developer Day 2014,重頭戲 良葛格老師 一登場介紹 JDK8 Functional API,雖然我現在主力不是寫 Java,不過以前也寫 Java 寫了好幾年,看著 Java 的慢慢演變,來到 Java 8 也納入了很多 (Functional Programming) FP 的元素。 還有今年 Apple 發表的 Swift,也帶著濃濃的 FP 味道,Closure、Higher-Order Functions、First-Class Functions、Nested Functions,包含最近發現原來 Instance Methods are Curried Functions in Swift 和 蘋果官方電子書提到 The Swift Programming Language – Pre-Release # Curried Functions (需開發者帳號才能看),身為 iOS 開發者,觀察網路這陣子的 Paradigm shift 影響不少,不論是教學相關、出版商、線上教育…等等,都重新因應這巨大的轉變。 Tiobe Index 2014 July 頭條就是 Swift 一進榜,就到了第 16 名,我們往下看看… 比較讓我驚訝的是,本來在找排行榜外的 F# 在哪,結果也進榜了,並且在 Swift & Ruby 之上。 借一下 Grant Crofton 的投影片 WTFP?! Functional Programming and why you should care, with examples in F# Pragmatic Dave Thomas:
FP 將會是 OOP 的繼承者。(Part 1 of Programming Elixir) Joel Spolsky:
不懂 FP,將無法理解或是創造出 MapReduce 演算法。(The Perils of JavaSchools) Uncle Bob Martin:
FP 將會是下個大代誌。(Functional Programming Basics) 以上重量級大大的見解,可見 Functional Programming 在未來程式設計上,又或者系統設計,皆是很重要的角色。 什麼是 Functional Programming以前是處理數學函數計算,又以 λ演算 (λ calculus) 為基礎,那到底什麼又是 Functional Programming (FP)呢?它是一種開發典範,只需要給我處理後的結果,不需要過問結果如何而來。例如:數學函式的 abs() ,回傳絕對值。 Why Functional Programming MattersWhy Functional Programming Matters 是一篇 1984年 的論文,到了 1990年 做了一些小幅度的修改,這篇論文主要在凸顯出 FP 的優點與重要性。 中文翻譯版:函數式程序設計為什麼至關重要 今年(2014) WWDC上 Tim Cook 提到開發App 需處理一些非同步(Asynchronous)的問題 。平行化與非同步不論在任何開發上面,都是比較難處理的部分,複雜度高的邏輯,若加上 FP 的特性來處理這類複雜的問題,可以把邏輯表達的較為易懂。 從 OOP 到 Functional ProgrammingOOP (Object-oriented programming) 教我們基本的單位就是 Class(類別),使用 Real World(真實世界)的角度去思考對應物件與方法,與 FP 所描述的方式大不相同。 我們練了好幾年的物件導向編程,不管是觀念或是 Design Pattern,處理程式上的問題,該用什麼樣的設計樣式來解決,大家都很熟悉。 如果轉換到 FP,OOP 上面許多的 Design Patterns 雖然不是特別的重要,重點放在於處理資料流上面,使得開發者更能專注問題所在。 λ calculusλ演算 在 Objective-C 的角度來看稱之為 Blocks,是一個 Call by Reference 的 function,就像是 C語言 的 function pointers。學著去感受與體驗λ演算所帶來的方便性。 必須要懂的三個函式FP 有些特性我們必須熟悉,以及有一些好用的基礎函式,例如高階排序函式 (Higher-Order Functions),底下我們舉三個基本常用的函式:
Lazy 特性Lazy 也是 FP 很重要的一個特性,在需要的時候被執行,叫做 Call by Need,還沒用到的時候不執行,就不會跟其他的工作搶資源。 Swift 裡面也有這樣的特性,叫做延遲儲存屬性(Lazy Stored Properties),屬性在第一次被呼叫時才執行或初始化該屬性,之後呼叫則直接從暫存裡面取得。 開發者的下一步如果之前沒接觸過 FP 的開發者,其實也不需太在意,有些時候您已經正在默默地使用 FP 帶來的一些功能,FP的世界是很美好的,漸漸的,它的輕快、高效,正一步一步的征服我們的程式碼。 |
frank42a
09/26
学习学习,不错的说!