Swift已经具有结果类型

也许。

在过去的几年中,我有幸使用多种语言编写和部署应用程序。 Scala,ruby,javascript,haskell,clojure等。每次我拿起一个工具时,特别是如果它对我来说是新的,我都会尝试学习它的精髓。 编程语言是任何人都可以用来构建事物的思想和概念的工具箱。 但是,我对同事和在线使用当前可用工具的不满之处感到非常不满。

Rob Napier谈论了快速不是功能语言的话题,您应该注意一下。 这是关于如何使用一种语言的方式,而不是人们希望的方式的一课。 但是,我真的很失望Rob提出swift应该添加一个Result枚举。 Swift已经具有此功能,但是我想很多人都不喜欢它。

Swift具有Optional类型,但通常不会直接看到它。 您通过语言构造与可选元素进行交互。 一个例子:

在上面的示例中找不到“可选”,“一些”和“无”的字样。

Optional基本上是一种“也许”类型,直接在其语言中获得支持真的很好。 无需编写一堆case .some和其他类似的语句,我们只需使用let和其他语言结构来检测其中是否有任何东西。

下面的示例类似于针对Result类型看到的许多示例:

乍一看,这似乎很好。 我在许多快速项目中都添加了这样的枚举。 但是,最近我注意到,我总是不得不执行大量的仪式来从枚举中提取值:

或者可以尝试仅提取并使用成功案例:

为了与语言中已经存在的工具作斗争,需要进行大量工作。 Swift已经可以将函数标记为返回两种类型之一,一种是成功,另一种是Error ,并且它是throws

现在,我们可以使用语言的内置功能来调用该函数:

我已经说过很多人说他们避免throws因为他们认为使用异常进行控制流是不好的。 我同意,大多数情况下例外对于控制流是不合理的。

throw不会引发异常。 从迅速的文档:

Swift为运行时引发,捕获,传播和操作可恢复错误提供了一流的支持。

错误不是例外情况。 可恢复的错误是预期的,应该对此进行计划。

标记为throws的函数返回Error类型为失败的结果,并且编译器强制程序员处理成功和错误情况。 docatch就像专门的switchcase关键字,用于函数何时返回成功或错误值并提供人们期望的模式匹配功能。

是的,有rethrows以在函数堆栈中传播错误。 我在scala中做了完全相同的事情,以便在诸如Web请求之类的过程中“顺流”处理Result的错误。 这是使用类型和模式匹配的控制流,我很高兴它已内置在语言中,而不必每次都自己构建。

try ”一词是解释我要完成的任务的完美方法: 尝试一下,如果无法解决,我将以其他方式处理。 尝试/捕获情况的开始不是我最喜欢的单词,但我想不到更好的方法了。

我不是敏捷专家,我每天都不会使用它,我想听听您对这个问题的看法。 还是应该迅速添加一个Result枚举,并让程序员在throwsResult之间进行选择? 还是某些片段库会一直枚举而其他枚举却全部枚举的碎片库?

谢谢阅读。