Hi, AFAIK, these all would be very much sugar for:
1) (1 ..< 5).reversed() 2) The same as above: (1 ... 5).reversed() does exactly what you want. 3) Kind of makes sense to me to include >.., though to be thorough, you'd need to add >.< as well - that's a weird looking operator... 4) There's a global function for this: stride(from: 1, to: 10, by: 2) Charlie > On Sep 21, 2016, at 9:49 AM, Mr Bee via swift-evolution > <swift-evolution@swift.org> wrote: > > Hi, > > I'm a Swift newbie so forgive me if my question sounds a bit silly, or > perhaps had been asked previously. My question is, why Swift doesn't have > built-in operator for backward or decremented range? Especially to be used in > for-in loop. > > Swift only has ... (closed range) and ..< (half-opened range) that both go > forward (incremented). To use backward (decremented) range, we have to use > several techniques (stride, sequence, etc). Of course those techniques work > well. But I don't think they're very swifty, so to say. > > So, is it possible to propose a new operator and a modification to existing > operator regarding range? Would such proposal be considered and implemented > after Swift 3? If it is, here's my pre-proposal about it. > > 1. Add new ..> operator that goes backward (decremented) as companion to ..< > operator that goes forward (incremented). > > Example: > for i in 1 ..< 5 { print(i) } > will prints: 1 2 3 4 > for i in 5 ..> 1 { print(i) } > will prints: 5 4 3 2 > > 2. Modify the ... operator to be able to go both ways. If the left operand is > greater than the right, it goes backward (decremented). While if the left > operand is less than the right, it goes forward (incremented). > > Example: > for i in 1 ... 5 { print(i) } > will prints: 1 2 3 4 5 > for i in 5 ... 1 { print(i) } > will prints: 5 4 3 2 1 > > 3. Add new pair of operator to accompany the ..> and ..< (half opened range > on the right side) pair operator. It's >.. and <.. operators which are half > opened range on the left side. As you might guess, the >.. is the opposite of > ..> operator and the <.. is the opposite of the ..< operator. > > Example: > for i in 1 <.. 5 { print(i) } > will prints: 2 3 4 5 > for i in 5 >.. 1 { print(i) } > will prints: 4 3 2 1 > > 4. I would like to go even further by introducing a new attribute into for-in > loop syntax. It's `step` keyword which is used to define the interval of the > loop (like BASIC). Of course this additional attribute only works if the > range is countable or indexable. If not, the compiler should complain. > > Example: > for i in 1 ... 10 step 2 { print(i) } > will prints: 1 3 5 7 9 > for i in 10 ... 0 step 2 { print(i) } > will prints: 10 8 6 4 2 0 > for i in 1 ..< 9 step 3 { print(i) } > will prints: 1 3 6 > // note: 9 is omitted since it's on the opened side. > for i in 9 >.. 1 step 2 { print(i) } > will prints: 7 5 3 1 > // note: 9 is omitted since it's on the opened side. > > I hope you get the idea. I think such a rich for-in loop syntax would make > Swift smarter, more robust, and easier to be learned and understood. They're > also required since the flexibiliy of c-style for-loop is no longer available > from Swift 3 and on. Decremented or backward range is sometimes needed in > some algorithms. Making it built into the language would be better, instead > of using non-language solutions. This proposal also doesn't break old codes > since it doesn't change the old behavior. > > If such proposal is possible to be implemented —or at least considered— in > the next version of Swift, I'll do the work of the formal proposal on GitHub. > If it's not, well, I don't want to spend my time doing something that will be > ignored. > > Thank you. > > Regards, > > –Mr Bee > > PS. I apologize if my English isn't well enough. I hope you all understand > what I meant. :) > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution