> On 13 Apr 2016, at 17:53, Luis Henrique B. Sousa <[email protected]> wrote:
> 
> (…) I totally agree with @Vladimir that we could have a more clear and 
> swift-ly way to concisely wrap those operations.
> 
> The behaviour pointed out by him looks very nice and doable to me.
> 
> a = [1,2,3]
> a[-1..<6] - raises runtime error (right behavior by default, doesn't affect 
> existing code)
> a[truncate: -1..<6] - produces [1,2,3] (the very behaviour I proposed 
> initially)
> a[safe: -1..<6] - produces nil (i.e [T]?) (no runtime errors and makes it 
> easy to handle unexpected results)


I don't feel strongly about this. Yes, if this were shorter to express, it 
would feel like nicer design. But what Haravikk and Chris L. already said seems 
to me as wiser design.

(@Vladimir: Besides, I'm sure `.clamped(to:)` wasn't invented for this purpose 
but for doing interval arithmetic on ranges. It just happens to somewhat work 
here.)

– Would this feature really provide a measurable benefit to developers?
– Under which circumstances do you find yourself with a past-the-end upper 
bound such as 6 where `a.count == 3`?
– …Let alone a negative start index like `-1`?

I find cases like these to be much more common in languages like Python and 
Ruby where e.g. `array[-2]` refers to the penultimate element. Swift doesn't 
seem to want to go there.

For the use cases I can think of, Swift 3—as the proposal currently goes 
<https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/Collection.swift#L724-L808>—already
 offers the following suitable methods:

    array[bounds]
    array.prefix(maxLength)      // no precondition
    array.prefix(upTo: index)
    array.prefix(through: index)
    array.dropLast(n)            // no precondition
    array.dropFirst(n)           // no precondition
    array.suffix(from: index)
    array.suffix(maxLength)      // no precondition

If these feel too clumsy to use, maybe we should focus on making them all more 
convenient. Ideally, that suggestion would apply to all `Collection`s.

— Pyry

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to