技术开发 频道

程序员:.Net 类型你真的了解吗?

    【IT168 评论】类型不是类。大多数程序员都知道类是啥,却根本不知道类型是啥。

  《标准答案-有多少人能分得清值类型和引用类型?》中的答案是完全正确的。而《有多少人能分得清值类型和引用类型?》这篇文章中的这道面试题是完全没问题的,看似简单但要真正弄清需要极深功底。因为大多数程序员都知道类是啥,根本不知道类型是啥。

  很多情况下,简单的概念往往是最难搞清楚的。比如说,什么是价格?什么是企业?1991年诺贝尔经济学奖得主科斯两大贡献之一就是回答“什么是企业”(《企业的本质》)。

  类型是一个古老的词,这个词的真正含义是绝大多数程序员所不了解的。研究类型的人一般是设计程序语言的,写编译器的或者玩函数式语言的。讲类型的,有一本很出名的书,是Benjamin C. Pierce 的《Types and Programming Languages》,简称TAPL,中文翻译是《类型和程序设计语言》。这本书看了几次都只看下去了几页,太艰深了。

  按照Benjamin C. Pierce 的观点:

  A type system is a syntactic method for enforcing levels of abstraction in programs.

  每一种语言都有它自己的类型系统,下面是维基百科中对类型系统的定义:

  在计算机科学中,类型系统用于定义如何将编程语言中的数值和表逹式归类为许多不同的类型,如何操作这些类型,这些类型如何互相作用。类型可以确认一个值或者一组值具有特定的意义和目的(虽然某些类型,如抽象类型和函数类型,在程序运行中,可能不表示为值)。类型系統在各种语言之间有非常大的不同,也许,最主要的差异存在于编译时期的语法,以及运行时期的操作实现方式。

  如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换)就称此处理为强类型,反之称为弱类型。

  上面俺还看得懂,下面这段话,俺就傻眼了:

  类型可分为几个大类:

  原始类型

  这是最简单的类型种类,例如:整数和浮点数

  整数类型

  全部是数字的类型,例如:整数和自然数

  浮点数类型

  以浮点数表示数字的类型

  复合类型

  由基本类型组合成的类型,例如:数组或记录单元。抽象数据类型具有复合类型和界面两种属性,这取决于你提及哪一个。

  子类型

  派生类型

  对象类型

  例如:变量类型

  不完全类型(哥傻眼了)

  递归类型

  函数类型

  例如:双参函数

  全称量化类型(哥不知所云)

  如参数化类型、类型变量

  存在量化类型(哥看着天花板)

  如模块

  精炼类型(哥看着窗外)

  识别其它类型的子集的类型

  依存类型(哥去WC)

  取决于运行时期的数值的类型

  所有权类型(哥去找小月月)

  描述或约束面向对象系统结构的类型

  我们不是搞程序语言的,不要求看懂上面这段话。直觉上来说:

  (1)类型(type)不是类(class),类型和类是八竿子打不着的关系。别觉得类型带个类字,就觉得他们是亲戚,说出interface因为无法直接new就不是类型这种笑话;

  (2)类型是一种逻辑概念,它代表一种抽象和约束关系。通过抽象关系来描述程序,通过约束关系来保证程序的健壮性。 

0
相关文章