Golang Go语言是函数式语言吗?

发布于 1周前 作者 yuanlaile 来自 Go语言

有了解一些函数式编程的概念,刚刚开始接触golang。自己是做Java开发的,对函数式编程还是很迷惑,虽然知道lisp、scala是函数式语言。

问题:golang是函数式语言吗?


Golang Go语言是函数式语言吗?
17 回复

负责任的告诉你,不是。
推荐Rust或Scala

更多关于Golang Go语言是函数式语言吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


为什么是这两个语言。

函数式语言的最大特征是没有side effect。纯粹的函数式语言是haskell。不太纯的比如lisp。go绝对不是

Rust 不算函数式吧
函数式又有系别之分
Lisp家族:
LISP Scheme
ML家族 :
OCaml F#

Haskell Erlang不属于以上系别

好像是这样分的


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

你意思是 rust也算函数式?

我的意思是函数式不那么分系别的… 一般只分纯不纯

绝对不是

Golang这B 感觉很难写出具有美感的代码, 吸引我的唯一地方就是, 编译成一个文件丢到服务器就搞定.
java这货, 各种依赖, 一不小心体积就到几百M了
scala那个play尼玛也是几十M



這個理解稍有偏差。

函數式語言最大的特徵是,函數是一等公民:像其它語言中的變量一樣,函數可以作爲參數傳給其它函數,可以作爲返回值從其它函數返回,可以在其它函數內部聲明。函數式語言依賴函數之間的調用關係組合比較複雜的業務邏輯。

沒有副作用或者說沒有中間狀態是 函數式語言的特徵,像 JavaScript,Python 這樣支持函數式範式的語言當然有副作用。

说广一点,能把函数传的满天飞的都算是函数式编程语言了,JavaScript 啊,C++ 11 啦,都可以算。

狭义一点来看,无非就是按照 Lisp/ML/Haskell 系列来分,允不允许一点副作用(Haskell 不允许,通过 monad,unsafePerformIO 不算),还有是不是惰性求值。此外,有没有类型系统,类型系统有多强也算是一个区别,Lisp 就没有类型系统,Agda 这种语言……dependent type……我是没看下去。

代表的话,Lisp 是 Clojure Scheme Racket 之流比较火;ML 无非是 SML、OCaml、F#,Haskell 系……PureScript 算吗二三三。

至于 Golang,当然不算了。

scala 是语言
scala play 是full stack framework
两件事

应该是过程式,函数式的概念很极端的

不是,而且也不打算往那方面靠拢。
很多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属于命令式语言。

不是,go是命令式

Swift 和 Rust 类似,也可以算是函数式语言.

关于“Golang(Go语言)是否是函数式语言”的问题,这是一个值得深入探讨的话题。Go语言确实在一定程度上借鉴了函数式编程的思想,但它并不完全是一种纯粹的函数式语言。

在Go中,函数是第一等公民,你可以将函数作为参数传递给其他函数,也可以将函数作为返回值,这是函数式编程的一个重要特征。此外,Go语言支持闭包,允许你创建带有环境的函数,进一步增强了函数的能力。

然而,Go语言同时也保留了命令式编程的特点,比如使用变量和循环结构进行状态管理和流程控制。这些特性在函数式编程中通常是被尽量避免的,因为它们可能导致不可预测的状态变化。

因此,更准确地说,Go语言是一种多范式编程语言,它融合了函数式、命令式以及面向对象等多种编程范式。这种设计使得Go语言在保持简洁和高效的同时,也提供了足够的灵活性来应对各种编程需求。

总的来说,虽然Go语言在某些方面表现出函数式编程的特点,但它并不完全符合函数式语言的定义。如果你对函数式编程感兴趣,Go语言可以作为一个很好的起点,但如果你想深入学习函数式编程的精髓,可能需要考虑更加纯粹的函数式语言,如Haskell或Scala。

回到顶部