當 全世界的語言 都往 Functional Programming 發展 by Appletone | CodeData
top

當 全世界的語言 都往 Functional Programming 發展

分享:

使用 Swift 來增加程式碼可讀性 << 前情

今年參加 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 名,我們往下看看…

tiobe2014july

比較讓我驚訝的是,本來在找排行榜外的 F# 在哪,結果也進榜了,並且在 Swift & Ruby 之上。

借一下 Grant Crofton 的投影片 WTFP?! Functional Programming and why you should care, with examples in F#

Who Like FP?

Pragmatic Dave Thomas:

..and that’s why i think functional programming is a natural successor to object-oriented programming

FP 將會是 OOP 的繼承者。(Part 1 of Programming Elixir)

Joel Spolsky:

Without understanding function programming , you can’t invent MapReduce, the algorithm that makes Google so massively scalable

不懂 FP,將無法理解或是創造出 MapReduce 演算法。(The Perils of JavaSchools)

Uncle Bob Martin:

it’s almost certainly ture that functional programming is the next big thing

FP 將會是下個大代誌。(Functional Programming Basics)

以上重量級大大的見解,可見 Functional Programming 在未來程式設計上,又或者系統設計,皆是很重要的角色。

什麼是 Functional Programming

以前是處理數學函數計算,又以 λ演算 (λ calculus) 為基礎,那到底什麼又是 Functional Programming (FP)呢?它是一種開發典範,只需要給我處理後的結果,不需要過問結果如何而來。例如:數學函式的 abs() ,回傳絕對值。

Why Functional Programming Matters

Why Functional Programming Matters 是一篇 1984年 的論文,到了 1990年 做了一些小幅度的修改,這篇論文主要在凸顯出 FP 的優點與重要性。

中文翻譯版:函數式程序設計為什麼至關重要

今年(2014) WWDC上 Tim Cook 提到開發App 需處理一些非同步(Asynchronous)的問題 。平行化與非同步不論在任何開發上面,都是比較難處理的部分,複雜度高的邏輯,若加上 FP 的特性來處理這類複雜的問題,可以把邏輯表達的較為易懂。

從 OOP 到 Functional Programming

OOP (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),底下我們舉三個基本常用的函式:

  • map
    尋訪每個元素,加以處理,並且回傳處理後的元素。
  • filter
    回傳 布林值,以決定是否處理該元素。
  • reduce
    尋訪每個元素,依序組合元素,轉換成結果,丟給下個元素運算組合,然後產生最終組合的結果。

Lazy 特性

Lazy 也是 FP 很重要的一個特性,在需要的時候被執行,叫做 Call by Need,還沒用到的時候不執行,就不會跟其他的工作搶資源。

Swift 裡面也有這樣的特性,叫做延遲儲存屬性(Lazy Stored Properties),屬性在第一次被呼叫時才執行或初始化該屬性,之後呼叫則直接從暫存裡面取得。

開發者的下一步

如果之前沒接觸過 FP 的開發者,其實也不需太在意,有些時候您已經正在默默地使用 FP 帶來的一些功能,FP的世界是很美好的,漸漸的,它的輕快、高效,正一步一步的征服我們的程式碼。

分享:
按讚!加入 CodeData Facebook 粉絲群

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

frank42a09/26

学习学习,不错的说!

熱門論壇文章

熱門技術文章