【问题标题】:Terminology of Optionals in Swift or other languagesSwift 或其他语言中的 Optional 术语
【发布时间】:2015-07-06 12:52:05
【问题描述】:

在 Swift 中,我们操作的元素都有类型。

当我们使用这些类型时,我们可以添加一个 '!'、'?' 或 nothing 来表示它们的可空性。 p>

  1. 我应该怎样称呼'?'或'!'来表达这种特质?

类型装饰器?装饰师?操作员 ?还有什么?

  1. 使用这个字符时创建的类型应该叫什么?

它是一种新类型吗?是装饰类型吗?类型变体?

快速编译器似乎将它们视为新类型,但是我的问题与实现或语言无关,因此我将其标记为与语言无关。

编辑:我正在寻找一个与语言无关的名称。我理解 pranjalsatija 的注释选项被定义为 compound type。 然而,这是一个语言实现细节。 我可以将我的问题改写为:

在使用类型定义时有特殊含义的字符叫什么,以及如何调用派生类型

这个术语应该适用于 ruby​​ 中的大写常量,因为概念相似。

【问题讨论】:

    标签: swift language-agnostic optional


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 2010-10-06
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多