Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 2.0中的例外。为什么';你喜欢什么;?_Swift - Fatal编程技术网

Swift 2.0中的例外。为什么';你喜欢什么;?

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”,用户不去查看他们使用的每个函数的定义就

我很好奇为什么Swift语言工程师决定采用这种语法:

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()
}
其他语言已经为此使用了不带任何关键字的大括号。大概他们觉得有一个关键字会使语法更容易阅读或解析