2017-01-04 57 views
0

在Swift的第2版中引入了使用关键字throw,throws,do, trycatch的错误处理。在the relevant chapter of the official Swift documentation不使用字例外,但它指出:在斯威夫特使用Swift的关键字“抛出”“异常”来调用错误是否正确?

错误处理类似于其他 语言异常处理,使用的尝试,渔获物和throw关键字的。不像许多语言,包括Objective-C的错误 处理斯威夫特不涉及解开调用栈 异常处理,这个过程 可以是计算昂贵的。

所以,只是因为调用堆栈丢失,它不能被称为例外? (有没有一个错误处理机制必须提供的功能的科学定义被称为例外?)

+2

问题是基于意见的。而且swift开发人员可以将它称为'错误处理'而不是'异常处理',因为他们调用'protocol'的原因与其他语言中称为'interface'的原因相同。只是因为他们可以和他们想要这样命名。 – user28434

+0

我的问题是关于编程语言Swift中“exception”这个术语的严格意义。我同意本杰明洛瑞的声明,大多数Swift程序员会以非正式的方式接受'异常'这个词。我认为在Swift中调用'protocol * interface *是严格意义上的错误。 – user1364368

+0

有严格的意思吗?正如'Java','C#','C++'和其他一些被称为'interface'的语言中'Swift'中所称的'protocol'。那么为什么它在严格意义上是错误的? – user28434

回答

1

我会争辩说,为什么它被称为错误处理与调用堆栈无关。基于这两个词的定义,调用堆栈是无关紧要的。我相信,你已包括在你的问题中引用的目的仅仅是提供错误处理的斯威夫特和异常处理其他语言,无论在名称的差异之间的区别。

为了鉴定非SWIFT语言方面的区别,一个共同的描述是,它不处理异常错误。因此,一个错误和一个例外是两个独特的实体。

现在斯威夫特,似乎他们试图获得完全赞成刚才使用术语错误去掉单词“异常”的。因此可以处理错误,如果没有,程序崩溃。这很可能是因为调用实际崩溃并不重要,更重要的是造成它的原因,在这种情况下是“错误”。根据iOS世界中的使用情况,我几乎没有这方面的经验,但我认为尽管称它为“异常处理”在技术上并不正确,但大多数Swift程序员会知道你在说什么,可能不会纠正你(甚至不认为纠正你)。

总的来说,我认为它主要是一种文字游戏,而不是什么构成一个“错误”,什么构成了一个“例外”。

编辑

我要澄清我的意思是错误和异常的iOS /斯威夫特内的差别不只是语义。例外是非法事件发生时会抛出的异常,并且可以创建错误以允许您防止显示这些消息/您的程序崩溃。在这方面他们是完全不同的东西。

我的观点是不同的编码语言中的术语“错误”(斯威夫特)和“异常”(在Java中为例)基本相同,只是名称不同。

例如,我可以尝试处理一个名为“ArrayError”的错误(我知道这个愚蠢的名字,它只是一个例子),在Java中我可能会试图捕获IndexOutOfBoundsException。这两个对象都被抛出并被捕获,因此我正在比较两者之间的区别,突出了Swift与其他语言中命名约定的区别。

但是不,错误和异常在技术上并不是一回事,即使在Swift中也是如此。

+0

来自'Java',我一直认为异常是一种特殊的错误处理方式,其优点是不必处理返回码。如果必须按顺序调用多个函数/方法,在这种意义上没有例外,如果可以调用下一个方法,则需要在每次调用后需要嵌套的“if”语句来决定。这些用于错误处理的嵌套'if'语句也被称为*金字塔末日*。这种意义上的例外有助于将业务逻辑从错误处理中分离出来。 – user1364368

相关问题