[swift-evolution] Throws, rethrows and declaration-modifiers in function declarations

David Hart david at hartbit.com
Wed Jul 20 01:48:30 CDT 2016


Because its part of the type. That’s why we can have throws on closure types:

func foo(bar: Int throws -> Void) {}

> On 19 Jul 2016, at 19:51, Matthieu Oger via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Hello,
>  
> I'm currently reading the updated Swift 3 preview book, and was wondering about the `throws` and `rethrows` keywords.
>  
> In a function declaration, all the keywords are at the beginning, except for `throws` and `rethrows`, which are… oddly placed.
>  
> In the grammar:
>  
> ```
> function-declaration → function-head <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-head> ­function-name <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-name>­ generic-parameter-clause <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/GenericParametersAndArguments.html#//apple_ref/swift/grammar/generic-parameter-clause>­opt­function-signature <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-signature>­ function-body <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-body>­opt­
> function-head → attributes <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/swift/grammar/attributes>­opt­declaration-modifiers <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/declaration-modifiers>­opt­func­
> function-signature → parameter-clause <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause>­throws­opt­function-result <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result>­opt­
> function-signature → parameter-clause <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause>­rethrows­function-result <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result>­opt­
> ```
> Is there a reason to have throws and rethrows at this specific position, instead of declaration-modifiers?
>  
> ie.:
>  
> This:
>  
> ```
> func send() throws -> String {}
> ```
>  
> Becomes:
>  
> ```
> throwing func send() -> String {}
> rethrowing func send() -> String {}
> ```
>  
> Like:
>  
> ```
> mutating func send() -> String {}
> ```
>  
> Or:
>  
> ```
> throw func send() -> String {}
> rethrow func send() -> String {}
> ```
>  
> Like: 
>  
> ```
> override func send() -> String {}
> ```
>  
> (You can also see the weird difference between `override` and `mutating`, one using the -ing suffix, the other being infinitive) 
>  
> Am I missing something? I find that these keywords break the flow of the function declaration, separating the parameters and the return type, which is never done anywhere else.
>  
> Thanks.
>  
> --
> Matthieu Oger
> Pixelnest Studio <http://pixelnest.io/>
>  
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160720/66a2fcc0/attachment.html>


More information about the swift-evolution mailing list