Swift 或其他语言中的 Optional 术语
Posted
技术标签:
【中文标题】Swift 或其他语言中的 Optional 术语【英文标题】:Terminology of Optionals in Swift or other languages 【发布时间】:2015-07-06 12:52:05 【问题描述】:在 Swift 中,我们操作的元素都有类型。
当我们使用这些类型时,我们可以添加一个 '!'、'?' 或 nothing 来表示它们的可空性。 p>
-
我应该怎样称呼'?'或'!'来表达这种特质?
类型装饰器?装饰师?操作员 ?还有什么?
-
使用这个字符时创建的类型应该叫什么?
它是一种新类型吗?是装饰类型吗?类型变体?
快速编译器似乎将它们视为新类型,但是我的问题与实现或语言无关,因此我将其标记为与语言无关。
编辑:我正在寻找一个与语言无关的名称。我理解 pranjalsatija 的注释选项被定义为 compound type
。
然而,这是一个语言实现细节。
我可以将我的问题改写为:
在使用类型定义时有特殊含义的字符叫什么,以及如何调用派生类型。
这个术语应该适用于 ruby 中的大写常量,因为概念相似。
【问题讨论】:
【参考方案1】:?
在类型末尾不是装饰器或运算符。它是 Swift 中的硬编码语法糖,可让您将 Optional<Thing>
缩短为 Thing?
。
?
并没有真正的名字(至少我从未听说 Swift 团队中的任何人使用过),在语言参考中它只是被描述为“后缀 ?
”。语言语法没有把它归入句法范畴。
同样,[Thing]
是 Array<Thing>
的简写,但在此上下文中没有方括号的名称。
将Option<Int>
描述为“派生自”Int
将误用“派生”一词。如果您想将其描述为“Optional
专用于Int
”,您可以。
事实上,您可能正在寻找与语言无关的术语,用于说明 Swift 如何允许您构建适用于任何类型 T
的类型(如 Optional<T>
或 Array<T>
),而无需关心 @987654337 是什么@实际上是。在这种情况下,该术语可能是generics。
!
有点不同。当应用于 Thing!
中的类型名称时,它是 ImplicitlyUnwrappedOptional<Thing>
的简写,与 ?
相同。
!
应用于Thing?
类型的变量时,等效于测试可选的后缀运算符,如果是nil
,则终止您的程序,如下所示:
postfix operator !<T>(value: T?) -> T
if let unwrapped = value
return unwrapped
else
fatalError("unexpectedly found nil while unwrapping an Optional value")
所以在这种情况下,!
可以被描述为一个运算符。但不是在第一种情况下。
有关给定语言用于描述可选项的术语,请参阅Option type ***页面。
【讨论】:
【参考方案2】:从技术上讲,Swift 中的可选项是完全不同的类型,而不是同一类型的变体。但是,对于开发人员来说,它们似乎是变体,因此我们将它们视为变体。这 ?和!还没有真正的指定名称,至少我不知道。从某种意义上说,您不应该将它们称为类型装饰器,因为可选项本身就是新类型。所以要回答你的问题,?和!是类型名称的一部分,比其他任何东西都重要。使用 ? 时创建的新类型或一个!就是这样。一种全新的类型。
【讨论】:
developer.apple.com/library/ios/documentation/Swift/Conceptual/… 查看此链接以了解有关 Optional 如何工作的更多详细信息。基本上,Apple 说 Optionals 是单独定义的,并且写 String?与编写 Optional使用 '?' 创建的类型是一个可选的和'!'是一个隐式展开的可选
我认为答案here 可能会帮助你,他们将两者都称为装饰品
Here's a larger explanation about exclamation marks
And here's one for question marks
【讨论】:
以上是关于Swift 或其他语言中的 Optional 术语的主要内容,如果未能解决你的问题,请参考以下文章
swift 可选类型(optional)--- swift 入门
Swift中的Optional类型 (可选类型)与强制解包 ? !