Swift或其他语言的Optionals术语

时间:2015-07-06 12:52:05

标签: swift language-agnostic optional

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

当我们使用这些类型时,我们可以添加&#39; &#39; <#39; &#39;或者 nothing 来表达他们的可空性。

  1. 我该怎样称呼&#39; &#39;或&#39; &#39;用来表达这个特质?
  2. 类型装饰者?装饰师?接线员?别的什么?

    1. 使用此字符时,我称之为创建的类型是什么?
    2. 这是一种新型吗?它是装饰类型吗?类型变化?

      swift编译器似乎将它们视为新类型,但我的问题不是实现或语言相关,因此我将其标记为语言不可知。

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

      在将其用作类型定义时,您如何称呼具有特殊含义的字符,以及如何调用派生类型

      这个术语应该适用于红宝石中的资本套管常数,因为概念是相似的。

3 个答案:

答案 0 :(得分:7)

类型末尾的

?不是装饰器或运算符。它是Swift中硬编码的语法糖,允许您将Optional<Thing>缩短为Thing?

?并没有真正的名字(至少我从未听过Swift团队中的任何人使用过一个名字),在语言参考中它只被描述为“后缀?” 。语言语法没有把它放在句法范畴中。

同样,[Thing]Array<Thing>的简写,但在此上下文中没有方括号的名称。

Option<Int>描述为“派生自”Int将误用“衍生”一词。如果您想将其描述为“Optional专门用于Int”,则可以。

事实上,您可能正在寻找与Swift允许您构建适用于任何类型Optional<T>的类型(如Array<T>T)的语言无关的术语不得不关心T实际上是什么。在这种情况下,该术语可能是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维基百科页面。

答案 1 :(得分:0)

Swift中的Optionals在技术上是完全不同的类型,而不是相同类型的变体。但是,对于开发人员来说,他们似乎是变体,所以我们会这样对待它们。的?而且!我还没有真正拥有一套指定名称,至少不是我所知道的。从某种意义上说,你不应该将它们称为类型装饰器,因为选项本身就是新类型。那么回答你的问题,?而且!是类型名称的一部分,而不是其他任何东西。使用时创建的新类型?还是一个!就是这样。一种全新的类型。

答案 2 :(得分:0)

使用'?'创建的类型是一个可选的'!'是隐式解包的可选

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

Here's a larger explanation about exclamation marks

And here's one for question marks