加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

函数是一等公民,这究竟在说什么?

发布时间:2021-05-23 16:05:09 所属栏目:编程 来源:互联网
导读:对于有些人来说这根本不是问题,但有些人却想不明白。我提到,在 Go 语言中,函数是一等公民,但对方不清楚这到底在说什么。看来有必要解释下什么是一等公民。

对于有些人来说这根本不是问题,但有些人却想不明白。我提到,在 Go 语言中,函数是一等公民,但对方不清楚这到底在说什么。看来有必要解释下什么是一等公民。

再往下看之前,你能说出什么是一等公民吗?

关于一等公民[1](First-class citizen)看看维基百科的定义:

In programming language design, a first-class citizen (also type, object, entity, or value) in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, modified, and assigned to a variable.

大意是说,在编程语言中,所谓一等公民,是指支持所有操作的实体, 这些操作通常包括作为参数传递,从函数返回,修改并分配给变量等。

比如 int 类型,它支持作为参数传递,可以从函数返回,也可以赋值给变量,因此它是一等公民。

类似的,函数是一等公民,意味着可以把函数赋值给变量或存储在数据结构中,也可以把函数作为其它函数的参数或者返回值。关于函数是一等公民,在维基百科也有定义[2]。

In computer science, a programming language is said to have first-class functions if it treats functions as first-class citizens. This means the language supports passing functions as arguments to other functions, returning them as the values from other functions, and assigning them to variables or storing them in data structures. Some programming language theorists require support for anonymous functions (function literals) as well.In languages with first-class functions, the names of functions do not have any special status; they are treated like ordinary variables with a function type. The term was coined by Christopher Strachey in the context of "functions as first-class citizens" in the mid-1960s.

函数作为一等公民的概念是 1960 年由英国计算机学家 Christopher Strachey[3] 提出来的。然而,并非所有语言都将函数作为一等公民,特别是早期,比如 C 语言中函数就不是一等公民,一些功能通过函数指针来实现的;再比如 C++、Java 等,都是后来的版本才加上的。

一般来说,函数式编程语言、动态语言和现代的编程语言,函数都会作为一等公民,比如:Scala、Julia 等函数式语言,JavaScript、Python 等动态语言,Go、Rust、Swift 等现代的编译型语言。

为了让大家对函数是一等公民有更深的理解,针对上文提到的一等公民的一等功能,我们看看 Go 语言是如何支持的。

匿名函数

函数一般是有名字的,但有时候没有名字的函数更简洁、好用。没有名字的函数叫匿名函数。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读