有了解一些函数式编程的概念,刚刚开始接触golang。自己是做Java开发的,对函数式编程还是很迷惑,虽然知道lisp、scala是函数式语言。
问题:golang是函数式语言吗?
1
signifox 2015-04-23 11:06:55 +08:00
负责任的告诉你,不是。
推荐Rust或Scala |
2
datou552211 2015-04-23 11:09:19 +08:00
@signifox 为什么是这两个语言。
|
3
monnand 2015-04-23 11:15:26 +08:00 via Android
函数式语言的最大特征是没有side effect。纯粹的函数式语言是haskell。不太纯的比如lisp。go绝对不是
|
4
mingzhi 2015-04-23 11:21:10 +08:00
|
5
zhyu 2015-04-23 11:35:05 +08:00
@mingzhi
Functional programming languages, especially purely functional ones such as Hope and Rex, have largely been emphasized in academia rather than in commercial software development. However, prominent functional programming languages such as Common Lisp, Scheme,[2][3][4][5] Clojure, Racket,[6] Erlang,[7][8][9] OCaml,[10][11] Haskell,[12][13] and F#[14][15] have been used in industrial and commercial applications by a wide variety of organizations. http://en.wikipedia.org/wiki/Functional_programming |
6
zhyu 2015-04-23 11:37:47 +08:00
|
9
xua131988 2015-04-23 12:00:53 +08:00
绝对不是
Golang这B 感觉很难写出具有美感的代码, 吸引我的唯一地方就是, 编译成一个文件丢到服务器就搞定. java这货, 各种依赖, 一不小心体积就到几百M了 scala那个play尼玛也是几十M |
10
yukirock 2015-04-23 14:37:23 +08:00
@monnand
這個理解稍有偏差。 函數式語言最大的特徵是,函數是一等公民:像其它語言中的變量一樣,函數可以作爲參數傳給其它函數,可以作爲返回值從其它函數返回,可以在其它函數內部聲明。函數式語言依賴函數之間的調用關係組合比較複雜的業務邏輯。 沒有副作用或者說沒有中間狀態是 _純_ 函數式語言的特徵,像 JavaScript,Python 這樣支持函數式範式的語言當然有副作用。 |
11
notcome 2015-04-23 16:26:19 +08:00
说广一点,能把函数传的满天飞的都算是函数式编程语言了,JavaScript 啊,C++ 11 啦,都可以算。
狭义一点来看,无非就是按照 Lisp/ML/Haskell 系列来分,允不允许一点副作用(Haskell 不允许,通过 monad,unsafePerformIO 不算),还有是不是惰性求值。此外,有没有类型系统,类型系统有多强也算是一个区别,Lisp 就没有类型系统,Agda 这种语言……dependent type……我是没看下去。 代表的话,Lisp 是 Clojure Scheme Racket 之流比较火;ML 无非是 SML、OCaml、F#,Haskell 系……PureScript 算吗二三三。 至于 Golang,当然不算了。 |
12
windyboy 2015-04-23 16:50:35 +08:00
scala 是语言
scala play 是full stack framework 两件事 |
13
njutree 2015-04-23 17:18:23 +08:00 via iPhone
应该是过程式,函数式的概念很极端的
|
14
hooluupog 2015-04-23 17:18:28 +08:00
不是,而且也不打算往那方面靠拢。
很多FP里面的东西直接拿来往Go里面套也是不行的。 比如一切都是不可变的,一切皆为表达式,DSL,continuation,curry,monad transform,global type inference,patern matching,algebraic type等等等等。Go编译器也没有做尾递优化的打算。 和java最大的不同是Go支持一等函数,Go基于组合而不是面向对象(用type embedding 和interface实现inheritance的效果)。同时Go里面一切都是通过值传递的,这也是和java不同的地方。 Go属于命令式语言。 |
15
hhkbp2 2015-04-23 23:46:42 +08:00
不是,go是命令式
|
16
tangplin 2015-07-21 14:20:58 +08:00
Swift 和 Rust 类似,也可以算是函数式语言.
|