<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I like the idea in theory, but the question is; is it really safer to return a result that the developer may not have wanted, versus an error indicating that a mistake may have been made? I wonder if perhaps there could be an alternative, such as a variation of the operator like so:</div><div class=""><br class=""></div><div class=""><font face="Monaco" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>let b = a [0 &amp;..&lt; 5]<span class="Apple-tab-span" style="white-space:pre">        </span>// Equivalent to let b = a[0 ..&lt; min(5, a.endIndex)], becomes let b = a[0 ..&lt; 3]</font></div><div class=""><br class=""></div><div class="">I’m just not sure that we can assume that an array index out of range error is okay without some kind of indication from the developer, as otherwise we could end up returning a partial slice, which could end up causing an error elsewhere where the size of the slice is assumed to be 5 but isn’t.</div><br class=""><div><blockquote type="cite" class=""><div class="">On 11 Apr 2016, at 13:23, Luis Henrique B. Sousa via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">This proposal seeks to provide a safer <font face="monospace, monospace" class="">..&lt;</font> (aka half-open range operator) in order to avoid **Array index out of range** errors in execution time.<br class=""><br class="">Here is my first draft for this proposal: <a href="https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md" class="">https://github.com/luish/swift-evolution/blob/half-open-range-operator/proposals/nnnn-safer-half-open-range-operator.md</a><br class=""><br class="">In short, doing that in Swift causes a runtime error:<div class=""><p class=""><font face="monospace, monospace" class=""><span class="">let</span><span class=""> a </span><span class="">=</span><span class=""> [</span><span class="">1</span><span class="">,</span><span class="">2</span><span class="">,</span><span class="">3</span><span class="">]<br class=""></span><span class="">let</span><span class=""> b </span><span class="">=</span><span class=""> a[</span><span class="">0</span><span class="">..&lt;</span><span class="">5</span><span class="">]<br class=""></span><span class="">print</span><span class="">(b)</span></font></p><p class=""><span class="">&gt; Error running code:&nbsp;<br class=""></span>&gt; fatal error: Array index out of range</p><p class=""><span class="">The proposed solution is to slice the array retur</span>ning 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]. <br class="">We can see this very behaviour in other languages, such as Python and Ruby as shown in the proposal draft.</p><p class="">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. <br class=""><br class="">Viewing that it is my very first proposal, any feedback will be helpful.</p></div><div class=""><div class="gmail_signature"><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class="">Thanks!</div><div class=""></div><br class=""></div><div class="">Luis Henrique Borges</div><div class="">@luishborges</div></div></div></div></div></div></div></div></div>
</div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>