[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>optfunction-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>optdeclaration-modifiers <https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/declaration-modifiers>optfunc
> 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>throwsoptfunction-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>rethrowsfunction-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