[swift-evolution] Throws, rethrows and declaration-modifiers in function declarations
Matthieu Oger
moger at pixelnest.io
Tue Jul 19 12:51:30 CDT 2016
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[1] function-name[2] **generic-parameter-clause[3]*opt*function-
signature[4] **function-body[5]*opt
*function-head *→ *attributes[6]*opt*declaration-
modifiers[7]*optfunc
*function-signature *→ *parameter-clause[8]*throwsopt*function-
result[9]*opt
*function-signature *→ *parameter-clause[10]*rethrows*function-
result[11]*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[12]
Links:
1. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-head
2. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-name
3. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/GenericParametersAndArguments.html#//apple_ref/swift/grammar/generic-parameter-clause
4. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-signature
5. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-body
6. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html#//apple_ref/swift/grammar/attributes
7. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/declaration-modifiers
8. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause
9. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result
10. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/parameter-clause
11. https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/swift/grammar/function-result
12. http://pixelnest.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160719/cfc41cb9/attachment.html>
More information about the swift-evolution
mailing list