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

Leonardo Pessoa me at lmpessoa.com
Tue Jul 19 14:51:14 CDT 2016


I'm really really sure I don't want to see a `override throwing
mutating func foo()` anywhere. Too much to read and no commas (please,
I'm not saying this as a challenge!).

Additionally, I think `overriden` would make the code much more
english-readable and I'm still not proposing it.

L


On 19 July 2016 at 16:01, Javier Soto via swift-evolution
<swift-evolution at swift.org> wrote:
> 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 ­function-name­
>> generic-parameter-clause­opt­function-signature­ function-body­opt­
>>
>> function-head → attributes­opt­declaration-modifiers­opt­func­
>>
>> function-signature → parameter-clause­throws­opt­function-result­opt­
>>
>> function-signature → parameter-clause­rethrows­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
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
> --
> Javier Soto
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>


More information about the swift-evolution mailing list