函數式語言的缺陷是什麼?


http://homepages.inf.ed.ac.uk/wadler/papers/expression/expression.txt


人讀代碼時是過程式的。


函數式本身沒錯,不過如果某些語言僅僅允許函數式一種范型,或者語言明明允許多種范型程序員還強迫自己為了代碼很「Functional」而把函數式不善於表達的一些邏輯寫成「函數式」,那就是自找沒趣了。

現在編程語言往往做成多范型,正常的程序員無論是使用偏函數式風格的語言如F#,還是傳統OO加了點函數式風格的語言如C++,都會選擇使用語言中最合適表達需求的部分。


函數式語言在處理有副作用的IO時,很不方便,但是副作用在真實世界中是存在的,因此用純函數式是不夠的,OO也有其價值。推薦一篇簡短的好文章 為什麼說面向對象編程和函數式編程都有問題


你學不會。

還有就是某些語言對無副作用要求太反人類。


難找工作.


它描述的是一個時間切片上的邏輯世界,沒有描述時間線。所以是個殘疾的形式系統。當描述時間切片時是對的,因為這個特點,對Coder理清思路也有好處,其他就沒什麼了。IO使用Monad實際是利用了類型系統的邏輯約束,相比指令式一片混論,Haskell這點還是好了,不過這其實並不是函數式造成的,而是含義解釋的不精確混亂導致的,Haskell在這點多做了點而已。


沒什麼不好學的,就是yet another programming paradigm。

缺陷是,好多語言設計得不real world,用來解決實際問題很無(sha)力(bi),比如Haskell。但是Scala、Clojure這些還是可以看看的,業界也開始嘗試了。


對於Pure FP來說最大的問題在於它不允許變數,因此是反演算法的。Pure FP在很多問題上永遠達不到命令式編程語言能做到的(低)演算法複雜度


函數式很符合我的思維方式,想到什麼寫什麼。

問題就是,一但習慣了這種思維方式,就很難擺脫。

發現自己離開遞歸就不會寫代碼了 ,完全hold不住mutable。


學習曲線吧,但是感覺就使用來講,還好,慢慢推廣開了,用的人多了就好了


機器的內存是mutable的,你非得把它當immutable來用,就屬於自縛手腳。


沒有對象……


函數式語言的一個特色是,

無副作用&<-&>引用透明-&>懶惰求值,就是一個表達式(調用),傳來傳去都一樣,以怎樣的順序求值都一樣, 像這樣的賦值操作原則上也是不允許的,

a = 1;

a()

a = 2;

a()

所以大部分從類c語言過來的程序員根本就很難接受它, 更不用說像haskell這樣去模擬這樣一個副操作需要要祭出抽象代數範疇論這樣的東西了,但用不著理解,你還是可以使用。

我這認為這主要是計算機教育和主流環境的問題,而不是編程語言的問題,也許我們從頭接受函數式語言的教育會更好.


過於純數學的理想化 導致一個純函數編程 非常廢力且無意義 但是函數與對象一樣成為一等公民 那麼gof的設計模式可以再在1/3常用的基礎上再砍掉1/3 所以現在 一個合格的現代語言應該可以混合應用這兩種模式


推薦閱讀:

為什麼 pattern matching 常常出現在函數式編程語言?
python協程是什麼?
為什麼會有函數式編程?
函數式編程能否解決所有經典的演算法問題?
想要理解函數式編程的思想,最好用哪種函數式編程語言入門?

TAG:編程語言 | 函數式編程 |