[swift-evolution] Feature proposal: Range operator with step

Hans Huck gutgedacht at gmx.de
Thu Apr 14 18:55:15 CDT 2016


Dave Abrahams via swift-evolution <swift-evolution at ...> writes:
> 
> 
> on Thu Apr 14 2016, Hans Huck <swift-evolution <at> swift.org> wrote:
> 
> > Dave Abrahams via swift-evolution <swift-evolution <at> ...> writes:
> >
> >> 
> >> If I thought extreme concision was important for this application, I'd be
> >> proposing something like 
> >> 
> >>   for x in 0.0..<20.0//1.3 {}
> >> 
> >> but personally, I don't,
> >>
> > And that is why exactly? The For-loop is at the very core of the language
> > and one of its most frequently used structures. Any unnecessary noise should
> > be avoided here.
> >
> >> which is why I propose `.striding(by: x)`
> >> rather than simply `.by(x)`, the latter being more open to
> >> misinterpretation.
> >> 
> > Please elaborate. How could
> >
> > for i in (1...10).by(3)
> >
> > possibly be misinterpreted?
> 
>   (p1..<p2).by(lineCount)
> 
> Doesn't exactly tell me what role lineCount is playing or what "by"
> does.  Maybe it means give me the range sorted by line count.  In this
> case a little more verbosity can be the difference between
> understandable and unmistakable.
> 

I find that unlikely, unless one is completely new to the language, but I
see your point -- for ranges in general.

It is impossible though to misinterprete it in the context of a For-loop, so
to keep the latter concise and the former unmistakable, what do you think of 

for i in p1..<p2 by x

as syntactic sugar for and internally mapped to

for i in (p1..<p2).striding(by: x)

Best of both worlds?

-- Hans




More information about the swift-evolution mailing list