计算机科学

首页 > 计算机科学

第一类对象

2018-09-05 18:21:01     所属分类:程序设计语言

第一类对象英语:First-class object)在计算机科学中指可以在执行期创造并作为参数传递给其他函数或存入一个变数的实体[1]。将一个实体变为第一类对象的过程叫做“物件化”(Reification)[2]

“第一类对象”这一名称最早由克里斯托弗·斯特雷奇在1960年代发明,原称“第一类公民”(First-class citizen),意指函数可作为电脑语言中的第一类公民。英文中也称“First-class entity”或“First-class value”。

目录

  • 1 历史
  • 2 定义
  • 3 范例
  • 4 参考文献

历史

第一类对象和第二类对象的概念,在1960年由克里斯托弗·斯特雷奇引入。[3][4] 实际上他并没有给出严格的术语定义,而是给出了ALGOL语言中实数和过程的对比:

第一类对象和第二类对象。在Algol程序语言中,一个“实数”可能会出现在一个表达式中或被赋给一个变量,并可能在过程调用中作为实际参数出现。而“过程”只可能会出现在另一个过程调用中,最常见的是作为操作符,有时候也作为实参。除此之外,没有表达式会涉及到过程,或者将过程作为计算结果。因此在某种意义上,在Algol程序语言中的过程是第二类变量,它们总是会单独出现,不可能被一个表达式或一个变量表示(形式参数除外)…[5]

在1990年代,拉斐尔芬克尔[6] 提出了第二类值和第三类值的定义,但这些定义尚未被广泛采用。[7]

定义

第一类对象不一定是面向对象程序设计所指的物件,而可以指任何程序中的实体。一般第一类对象所特有的特性为:

  • 可以被存入变数或其他结构
  • 可以被作为参数传递给其他函数
  • 可以被作为函数的返回值
  • 可以在执行期创造,而无需完全在设计期全部写出
  • 即使没有被系结至某一名称,也可以存在

范例

绝大多数语言中,数值与基础型别都是第一类对象,然而不同语言中对函数的区别很大,例如C语言与C++中的函数不是第一类对象,因为在这些语言中函数不能在执行期创造,而必须在设计时全部写好。相比之下,Scheme中的函数是第一类对象,因为可以用lambda语句来创造匿名函数并作为第一类对象来操作。

参考文献

  1. ^ Scott, Michael. Programming Language Pragmatics. San Francisco, CA: Morgan Kaufmann Publishers. 2006: 140. 
  2. ^ J. Malenfant, M. Jacques and F.-N. Demers. A Tutorial on Behavioral Reflection and its Implementation. parc.com. [2010-10-09]. (原始内容存档于2010-05-28). 
  3. ^ Rod Burstall, "Christopher Strachey—Understanding Programming Languages", Higher-Order and Symbolic Computation 13:52 (2000)
  4. ^ Harold Abelson; Gerald Jay Sussman. 章节1.3.4 脚注64. Structure and Interpretation of Computer Programs [计算机程序的构造和解释] 2. [2015-03-03]. (原始内容存档于2015-03-09) (英语). 
  5. ^ Christopher Strachey, "Fundamental Concepts in Programming Languages" in Higher-Order and Symbolic Computation 13:11 (2000); though published in 2000, these are notes from lectures Strachey delivered in August, 1967
  6. ^ R. Finkel. Advanced Programming language Design. : 73 (英语). 
  7. ^ Norman Ramsey. About first-,second- and third-class value. Stackoverflow. [14 September 2013] (英语). 

上一篇:批处理

猜你喜欢

相关推荐