Swift 2.0中的例外。为什么';你喜欢什么;?
我很好奇为什么Swift语言工程师决定采用这种语法:Swift 2.0中的例外。为什么';你喜欢什么;?,swift,Swift,我很好奇为什么Swift语言工程师决定采用这种语法: do { let x = try statement that throws try a void statement that throws } catch { } 与更传统的try-catch语法相比,它的作用似乎完全相同。除了在Swift的情况下,需要为引发异常的每一行键入try 他们想使用try调用每个可以抛出的特定表达式。我想这是因为对于异常的一个常见抱怨是它们是“无形的gotos”,用户不去查看他们使用的每个函数的定义就
do {
let x = try statement that throws
try a void statement that throws
} catch {
}
与更传统的try-catch语法相比,它的作用似乎完全相同。除了在Swift的情况下,需要为引发异常的每一行键入try 他们想使用
try
调用每个可以抛出的特定表达式。我想这是因为对于异常的一个常见抱怨是它们是“无形的gotos”,用户不去查看他们使用的每个函数的定义就无法判断将抛出什么。每次抛出函数调用时都需要try
,这样就消除了这个问题
就我个人而言,我不认为“看不见的gotos”是一个合理的抱怨。异常不是非结构化的(比如goto
),而是使错误处理高度结构化。此外,如果您正确地使用了异常,您几乎不需要一眼就知道抛出了什么函数。有关更多信息,请参阅,其中详细讨论了异常的正确使用
考虑到他们希望try
成为抛出函数调用的显式调用,他们可能不想将其用于传统的try
块语法
他们也可以不使用任何关键字:
{
let x = try foo()
} catch {
// ...
}
他们还使用do
引入任意嵌套范围:
do {
let x = foo()
}
其他语言已经为此使用了不带任何关键字的大括号。大概他们觉得有一个关键字会使语法更容易阅读或解析