I’m not sure I follow, how would the two be different?

> There might be value in entertaining the idea of unifying constructs such 
> that they all allow arbitrary combinations of for/while/where/etc.
> 
> Such as:
> 
> while !stopped for unit in workToDo where unit.passesTest(condition) { 
> unit.process() }
> 
> Which would mean something different than:
> 
> for unit in workToDo while !stopped where unit.passesTest(condition) { 
> unit.process() }
> 
> And yes, they are very similar visually but differ subtly in meaning, but the 
> same can be said about different sentences in english that might all share 
> the same words and differ only by their order. It’s not exactly a foreign 
> concept! I don’t know of any languages that are quite so expressive as that 
> might be. Are there advantages to something more outlandish like this? I 
> don’t know. I’m not proposing it directly, just thinking out loud, I guess.
> 
> l8r
> Sean
> 
> 
> > On Jun 8, 2016, at 4:44 PM, Haravikk via 
> > swift-evolution<[email protected]>wrote:
> > 
> > 
> > > On 8 Jun 2016, at 17:11, Xiaodi Wu<[email protected]>wrote:
> > > > On Wed, Jun 8, 2016 at 3:38 AM, 
> > > > Haravikk<[email protected]>wrote:
> > > > Yes this could be handled by an if/guard statement with continue, and 
> > > > while as proposed here could be done with the same plus a break, but 
> > > > these things come up so often that it just makes a lot of sense to get 
> > > > it all neatly onto one line.
> > > 
> > > As I pointed out above with Tim's example, putting it all on one line is 
> > > absolutely not 'neat'--it reads like spaghetti. That is one major beef I 
> > > have with this proposal: that it *encourages* writing on one line too 
> > > many things that, whether you use `where` or not, are much more clearly 
> > > written on multiple lines. If writing everything on one line is for you 
> > > the major advantage of this proposal, we could agree on everything else 
> > > and I would be very much opposed to this proposal on that basis alone.
> > 
> > I’m not proposing that every single loop have all of its conditions crushed 
> > onto one line, just like I wasn’t when discussing where on the condition 
> > clause thread. The usefulness of where and the proposed while is in the 
> > common, simple cases, for example:
> > 
> > for eachValue in theValues while eachValue<100 where eachValue % 2 == 0 { … 
> > }
> > 
> > The alternatives would be:
> > 
> > for eachValue in theValues {
> > guard eachValue<100 else { break }
> > guard eachValue % 2 == 0 else { continue }
> > …
> > }
> > for eachValue in theValues.prefix(while: { $0<100 }).filter({ $0 % 2 == 0 
> > }) { … } // Could also be on multiple lines
> > 
> > The former wastes vertical space for what it does IMO; it’s fine if the 
> > conditions were more complicated, but since they’re not where/while is 
> > ideal. The second isn’t terrible, but it’s a pretty noisy way to handle 
> > common loop conditions.
> > 
> > The use of where/while isn’t about eliminating either of these 
> > alternatives, they’re absolutely useful in cases where their drawbacks 
> > become advantages. For example the inline guards are great when the 
> > conditions are more complex, and necessary if you want to do more than the 
> > simple cases allow. The second form is best when you need more than the two 
> > methods, alternate methods, or you have predicates you can pass in 
> > directly, although personally when I do this I tend to do the chinning on 
> > its own lines outside of the loop, leaving me with a loop of: for eachValue 
> > in theFilteredValues { … } or whatever.
> > 
> > > Closures are--I'm sure you'd agree--a far more advanced concept than 
> > > loops. Concepts like closing over a variable are very, very hard. Many 
> > > useful things can be written without using closures. Not so many things 
> > > could do without loops. It very much matters that a learner might feel 
> > > that he or she cannot understand everything about a loop with the 
> > > handwavy explanation that it'll "come later”.
> > 
> > Not my point at all; my point was about the shorthand for closures not 
> > closure as a whole, you can’t learn the closure shorthands without first 
> > learning what a closure is. In exactly the same way where/while are just be 
> > shorthands for inline if/guard, you don’t need to learn about these clauses 
> > to make a functioning loop if you know how to do it with your if/guard 
> > statements. In fact it’s better to learn it in this order as once you know 
> > what each clause is a shorthand form of (if/guard continue or break) then 
> > you know exactly what it does already.
> > 
> > 
> > Ignoring for a moment that you’re opposed to the where clause in general, 
> > what would your thoughts be on only permitting one of where/while in a for? 
> > i.e- you would be able to do only one of:
> > 
> > for eachValue in theValues where eachValue % 2 == 0 { … }
> > for eachValue in theValues while eachValue<100 { … }
> > 
> > But not have both a where and a while on the same line. This eliminates the 
> > question mark around the order they are applied in, while still giving us 
> > the ability to essentially switch the behaviour of the where from continue 
> > to break. I’m not decided whether I want both in a single statement or if I 
> > just want to be able to choose between them. It also limits how much goes 
> > on one line as you have to use an inline condition to achieve both for a 
> > single loop.
> > _______________________________________________
> > swift-evolution mailing list
> > [email protected]
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 
> 
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to