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 相同。如果您阅读文档,您就会明白我的意思。这 ?和!实际上是语法糖,以使编写代码更容易,因此它们并不真正称为类型装饰器或运算符。 创建的新类型似乎更像是一个实现而不是一个概念,我认为它不应该影响术语,因为这是一个 Swift 特定的东西。指针、类、枚举都是概念,即使实际实现和行为因一种语言而异。【参考方案3】:

使用 '?' 创建的类型是一个可选的和'!'是一个隐式展开的可选

我认为答案here 可能会帮助你,他们将两者都称为装饰品

Here's a larger explanation about exclamation marks

And here's one for question marks

【讨论】:

以上是关于Swift 或其他语言中的 Optional 术语的主要内容,如果未能解决你的问题,请参考以下文章

swift中的optional

swift 可选类型(optional)--- swift 入门

Swift 可选(Optionals)类型

Swift中的Optional类型 (可选类型)与强制解包 ? !

Swift学习笔记————可选类型(Optional Type)

swift中? ! weak unowned的跟人理解