[swift-evolution] [Pitch] Guard/Catch
Zach Waldowski
zach at waldowski.me
Wed Jul 5 18:47:30 CDT 2017
I second Xiaodi on this. The syntax feels like a slam-dunk. The only
concerns I have are indentation, and ultimately that's not my problem to
decide about. ;)
Sincerely,
Zachary Waldowski
zach at waldowski.me
On Wed, Jul 5, 2017, at 07:15 PM, Xiaodi Wu via swift-evolution wrote:
> Initially, this proposal felt a little off, but on re-reading, I think
> I like it very much. It shows that guard/catch is meant to solve a
> nesting problem (just like guard/else was meant to solve one), and it
> preserves the idea that the else/catch clause must exit the outer
> scope, which is very important to the meaning of `guard`.>
> I agree with the proposal authors that mix-and-match guard/catch/else
> feels unwise. I see no reason why rewriting to repeat only the word
> `guard` (as in, `guard A catch { }; guard B else { }` instead of
> `guard A, B catch { } else { }`) is onerous enough to justify a syntax
> that is clearly harder to reason about.>
> On Wed, Jul 5, 2017 at 2:25 PM, Soroush Khanlou via swift-evolution
> <swift-evolution at swift.org> wrote:>> Jon — we explored allowing users to mix and match optional unwrapping
>> and error catching in the same guard, but found that it was
>> ultimately pretty confusing. We think that guard/else and guard/catch
>> should be two totally different components. Dave’s email lays out the
>> two best approaches, and the “Alternatives Considered” section of the
>> proposal goes into why those alternatives were ultimately rejected.>>
>>> On Jul 5, 2017, at 2:09 PM, Dave DeLong via swift-evolution <swift-
>>> evolution at swift.org> wrote:>>>
>>> Soroush’s proposal has the idea that maybe we could do multiple
>>> blocks for this scenario, like so:>>>
>>> guard try something(), let thing = optionalThing catch {
>>> // try something() failed
>>> } else {
>>> // the let-binding failed
>>> }
>>>
>>> 🤔 Alternatively, what if the “error” captured was optional in this
>>> scenario?>>>
>>> guard try something(), let thing = optionalThing catch {
>>> if let error = error {
>>> // the try call failed
>>> } else {
>>> // the optional binding failed
>>> }
>>> }
>>>
>>> Dave
>>>
>>>> On Jul 5, 2017, at 12:00 PM, Jon Shier via swift-evolution <swift-
>>>> evolution at swift.org> wrote:>>>>
>>>> I didn’t think I was going to like it but I really do. My only
>>>> concern, which isn’t really a deal breaker, is what it would look
>>>> like to chain multiple try and let statement in the same guard.
>>>> Unless that scenario works well I don’t think you could convince
>>>> others. i.e. In the case where I have:>>>>
>>>> guard try something(), let thing = optionalThing catch { }
>>>>
>>>> What happens when the let fails? No implicit error?
>>>>
>>>>
>>>>
>>>> Jon
>>>>
>>>>
>>>>> On Jul 5, 2017, at 1:30 PM, Soroush Khanlou via swift-evolution
>>>>> <swift-evolution at swift.org> wrote:>>>>>
>>>>> I’d like to propose a guard/catch construct to the language. It
>>>>> would allow code to use throwing functions and handle errors
>>>>> fully, without straying from a happy path. do/catch can be a bit
>>>>> heavy-handed sometimes, and it would be nice to be able to handle
>>>>> throwing functions without committing to all the nesting and
>>>>> ceremony of do/catch.>>>>>
>>>>> Full proposal, which discusses all the corner cases and
>>>>> alternatives:>>>>> https://gist.github.com/khanlou/8bd9c6f46e2b3d94f0e9f037c775f5b9
>>>>>
>>>>> Looking forward to feedback!
>>>>>
>>>>> Soroush
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution at swift.org
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>
> _________________________________________________
> 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/20170705/a1777bfc/attachment.html>
More information about the swift-evolution
mailing list