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

Javier Soto javier.api at gmail.com
Tue Jul 19 14:01:34 CDT 2016


I see where you're coming from.
Without any actual insight into the design of this syntax, I think throws
is in the position it is because it relates more to the return type of the
function. Aka a `throws -> T` function can either throw ErrorProtocol OR
return a T value.
On Tue, Jul 19, 2016 at 10:51 AM 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
>
-- 
Javier Soto
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160719/e5e25951/attachment.html>


More information about the swift-evolution mailing list