可空类型
编辑可空类型是一些编程语言的特点,它允许一个值被设置为特殊值NULL,而不是数据类型的通常可能的值。在静态类型的语言中,可空类型是一个选项类型,而在动态类型的语言中(值有类型,但变量没有),等同的行为是通过有一个单一的空值来提供。NULL经常被用来表示一个缺失的值或无效的值,例如来自一个未能返回的函数或数据库中一个缺失的字段,如SQL中的NULL。换句话说,NULL是未定义的。原始类型如整数和布尔运算一般不能为空,但相应的可空类型(分别为可空整数和可空布尔运算)也可以承担NULL值。这在三元逻辑中可以表示为FALSE,NULL,TRUE,如同三值逻辑一样。
可空类型的例子
编辑一个整数变量可以表示整数,但0(零)是一个特殊情况,因为0在许多编程语言中可以表示假。同时,这也没有给我们任何关于变量为空的概念,而在很多情况下需要这样的概念。这种需求可以通过一个可空类型来实现。在C#2.0这样的编程语言中,例如,一个可空的整数可以用问号来声明(int?)在像C#1.0这样的编程语言中,可空类型可以由外部库定义为新的类型(如NullableInteger、NullableBoolean)。布尔变量使其效果更加明显。它的值可以是真,也可以是假,而一个可空布尔变量也可以包含一个未定的表示。然而,涉及这种变量的逻辑操作的解释或处理方式取决于语言。与空指针相比,对象指针在大多数普通语言中可以默认设置为NULL,这意味着指针或引用不指向任何地方,没有对象被分配(变量不指向任何对象)。可空引用是由C.A.R.Hoare在1965年发明的,是AlgolW语言的一部分。
Hoare后来把他的发明描述为一个十亿美金的错误。这是因为可以为NULL的对象指针需要用户在使用前检查指针,并且需要特定的代码来处理对象指针为NULL时的情况。Java有对应于标量值的类,如Integer、Boolean和Float。结合autoboxing(对象和值之间的自动使用驱动转换),这实际上允许标量值的可空变量。与选项类型相比,可空类型的实现通常坚持空对象模式。有一个更普遍和正式的概念扩展了nullable类型的概念,它来自于选项类型,它执行了对特殊情况的明确处理。
语言支持
编辑以下编程语言支持nullable类型。具有本地null支持的静态类型语言包括。BallerinaC#DartKotlinSwiftCeylonSQLSAS(Missingvalues)支持空值库的静态类型语言包括。C#(自第2版起)DelphiFreePascalVB.NETJava(自第8版起)ScalaOxygeneF#静态类型的CLI语言具有null支持的动态类型语言包括。Perl标量变量默认为undef,可以设置为undef。PHP有NULL类型和is_null()方法,在7.1版中有本地nullable类型。Python有None值。Julia有nothing值(属于Nothing类型)和Union{T,Nothing}类型习惯法。Ruby有nil值和NilClass类型。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/170763/