I like the idea of the of the bounded subscript, however the optional one I 
feel could be used for clumsy code.

.first and .last have value, but once you start stepping several arbitrary 
indices in, then that code is likely fragile?


I can think of ‘within’, ‘inside’ and ‘intersecting’ as alternative names for 
‘bounded’ that attempt to explain what is going on:

let a = [1, 2, 3]

a[within: 0 ..< 5] // [1, 2, 3]
a[inside: 0 ..< 5] // [1, 2, 3]
a[intersecting: 0 ..< 5] // [1, 2, 3]


> On 28 Apr 2016, at 10:11 PM, Luis Henrique B. Sousa via swift-evolution 
> <[email protected]> wrote:
> 
> As we have discussed throughout this thread, the initial proposal was 
> modified to include alternative subscript methods instead of modifying the 
> default operator/subscript behaviour. 
> The first draft is here: 
> https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md
>  
> <https://github.com/luish/swift-evolution/blob/more-lenient-subscripts/proposals/nnnn-more-lenient-collections-subscripts.md>
> 
> I've also put this as a gist so that you can leave comments with respect to 
> the proposal document itself. Any suggestion or help is very welcome.
> https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8 
> <https://gist.github.com/luish/832c34ee913159f130d97a914810dbd8>
> 
> Regards,
> 
> - Luis
> 
> On Mon, Apr 11, 2016 at 1:23 PM, Luis Henrique B. Sousa <[email protected] 
> <mailto:[email protected]>> wrote:
> This proposal seeks to provide a safer ..< (aka half-open range operator) in 
> order to avoid **Array index out of range** errors in execution time.
> 
> Here is my first draft for this proposal: 
> https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md
>  
> <https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md>
> 
> In short, doing that in Swift causes a runtime error:
> let a = [1,2,3]
> let b = a[0..<5]
> print(b)
> 
> > Error running code: 
> > fatal error: Array index out of range
> 
> The proposed solution is to slice the array returning all elements that are 
> below the half-open operator, even though the number of elements is lesser 
> than the ending of the half-open operator. So the example above would return 
> [1,2,3]. 
> We can see this very behaviour in other languages, such as Python and Ruby as 
> shown in the proposal draft.
> 
> This would eliminate the need for verifications on the array size before 
> slicing it -- and consequently runtime errors in cases when the programmer 
> didn't. 
> 
> Viewing that it is my very first proposal, any feedback will be helpful.
> 
> Thanks!
> 
> Luis Henrique Borges
> @luishborges
> 
> _______________________________________________
> 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