[swift-evolution] [Pitch] Retiring `where` from for-in loops

Christopher Kornher ckornher at me.com
Fri Jun 10 14:52:10 CDT 2016


> On Jun 10, 2016, at 12:09 PM, Vladimir.S via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I don't think the 'where' in 'for' loop adds another dialect of Swift more than using of [Int] vs Array<Int> or shorthand syntax for Optionals adds it. (in addition to 'guard' vs 'if')
> So, it's just an opinion if 'where' in 'for' loop introduces new dialect or if it is a handy feature that can be used when it best suits the needs in some situation or even a metter of style(like [Int] vs Array<Int> or using .forEach vs for-in etc).
> 
> On 10.06.2016 20:17, Xiaodi Wu via swift-evolution wrote:
>> I think this idea--if you don't like it, then you don't have to use it--is
>> indicative of a key worry here: it's inessential to the language and
>> promotes dialects wherein certain people use it and others wherein they
>> don't. This is an anti-goal.
>> 
>> On Fri, Jun 10, 2016 at 12:10 let var go <letvargo at gmail.com
>> <mailto:letvargo at gmail.com>> wrote:
>> 
>>   Leave it in!
>> 
>>   It's a great little tool. I don't use it very often, but when I do it
>>   is because I've decided that in the context of that piece of code it
>>   does exactly what I want it to do with the maximum amount of clarity.
>> 
>>   If you don't like it, then don't use it, but I can't see how it
>>   detracts from the language at all.
>> 
>>   The *only* argument that I have heard for removing it is that some
>>   people don't immediately intuit how to use it. I didn't have any
>>   trouble with it at all. It follows one of the most basic programming
>>   patterns ever: "For all x in X, if predicate P is true, do something."
>>   The use of the keyword "where" makes perfect sense in that context, and
>>   when I read it out loud, it sounds natural: "For all x in X where P, do
>>   something." That is an elegant, succinct, and clear way of stating
>>   exactly what I want my program to do.
>> 
>>   I don't doubt that it has caused some confusion for some people, but
>>   I'm not sold that that is a good enough reason to get rid of it. It
>>   seems strange to get rid of a tool because not everyone understands how
>>   to use it immediately, without ever having to ask a single question. As
>>   long as its not a dangerous tool (and it isn't), then keep it in the
>>   workshop for those times when it comes in handy. And even if there is
>>   some initial confusion, it doesn't sound like it lasted that long. It's
>>   more like, "Does this work like X, or does this work like Y? Let's
>>   see...oh, it works like X. Ok." That's the entire learning
>>   curve...about 5 seconds of curiosity followed by the blissful feeling
>>   of resolution.
>> 
>>   On Fri, Jun 10, 2016 at 9:32 AM Xiaodi Wu via swift-evolution
>>   <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>>       On Fri, Jun 10, 2016 at 11:23 AM, Sean Heber via swift-evolution
>>       <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> 
>>> And to follow-up to myself once again, I went to my "Cool 3rd Party Swift Repos" folder and did the same search. Among the 15 repos in that folder, a joint search returned about 650 hits on for-in (again with some false positives) and not a single for-in-while use.
>> 
>>           Weird. My own Swift projects (not on Github :P) use “where” all
>>           the time with for loops. I really like it and think it reads
>>           *and* writes far better as well as makes for nicer one-liners.
>>           In one project, by rough count, I have about 20 that use
>>           “where” vs. 40 in that same project not using “where”.
>> 
>>           In another smaller test project, there are only 10 for loops,
>>           but even so one still managed to use where.
>> 
>>           Not a lot of data without looking at even more projects, I
>>           admit, but this seems to suggest that the usage of “where” is
>>           going to be very developer-dependent. Perhaps there’s some
>>           factor of prior background at work here? (I’ve done a lot of
>>           SQL in another life, for example.)
>> 
>> 
>>       That is worrying if true, because it suggests that it's enabling
>>       'dialects' of Swift, an explicit anti-goal of the language.

Programming styles are not dialects.

>> 
>> 
>> 
>>           I feel like “where” is a more declarative construct and that we
>>           should be encouraging that way of thinking in general. When
>>           using it, it feels like “magic” for some reason - even though
>>           there’s nothing special about it. It feels like I’ve made the
>>           language work *for me* a little bit rather than me having to
>>           contort my solution to the will of the language. This may be
>>           highly subjective.
>> 
>>           l8r
>>           Sean
>> 
>>           _______________________________________________
>>           swift-evolution mailing list
>>           swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>           https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>>       _______________________________________________
>>       swift-evolution mailing list
>>       swift-evolution at swift.org <mailto: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



More information about the swift-evolution mailing list