<div dir="ltr">Many thanks @Pyry, it&#39;s great to see those changes coming in swift 3. The examples using <i>clamp</i> you mentioned here would do what I&#39;m proposing, but I totally agree with @Vladimir that we could have a more clear and <i>swift-ly</i> way to concisely wrap those operations.<div><div class="gmail_extra"><div><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr" style="font-size:small"><br></div><div style="font-size:small">The behaviour pointed out by him l<span style="font-size:12.8px">ooks very nice and doable to me.</span></div><div style="font-size:small"><br></div><div dir="ltr" style="font-size:small"><font face="monospace, monospace"><span style="font-size:12.8px">a = [1,2,3]</span><br style="font-size:12.8px"><span style="font-size:12.8px">a[-1..&lt;6] - raises runtime error (r</span><span style="font-size:12.8px">ight behavior by default, doesn&#39;t affect existing code)</span><br style="font-size:12.8px"><span style="font-size:12.8px">a[truncate: -1..&lt;6] - produces [1,2,3] (the very behaviour I proposed initially)</span><br style="font-size:12.8px"><span style="font-size:12.8px">a[safe: -1..&lt;6] - produces nil (i.e [T]?) (no runtime errors and makes it easy to handle unexpected results)</span></font></div><div dir="ltr" style="font-size:small"><br></div><div dir="ltr" style="font-size:small"><span style="font-size:12.8px">I&#39;d like to hear more opinions before I update my proposal with those new subscript methods (instead of a different operator, or added as an alternative considered). </span></div><div dir="ltr" style="font-size:small">Thanks<br></div><div style="font-size:small"><br></div><div>- Luis</div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Wed, Apr 13, 2016 at 2:11 PM, Vladimir.S via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Is it really great to have a[a.indices.clamped(to: 0 ..&lt; 5)]<br>
instead of a clear a[truncate: 0 ..&lt; 5] ?<br>
and if it is not &quot;a&quot; but &quot;arrayOfSomeValues&quot; we have<br>
arrayOfSomeValues[arrayOfSomeValues.indices.clamped(to: 0 ..&lt; 5)]<br>
Don&#39;t feel this is nice.<br>
<br>
Is it really so wrong to have additional(to &quot;direct&quot; functions like &quot;indices.clamped&quot; ) handy and nice-looking methods/subscripts in language?<br>
<br>
IMO we all want to have great language. It should be great to code in such language. Is it great and enjoyable to have strange long construction instead of handy,clear and explicit expression?<br>
Why don&#39;t improve the language in all possible area where we can improve it? I believe we should improve.<span><br>
<br>
On 13.04.2016 14:09, Pyry Jahkola via swift-evolution wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
On 11 Apr 2016, at 15:23, Luis Henrique B. Sousa via swift-evolution<br></span><span>
&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a> &lt;mailto:<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;&gt; wrote:<br>
<br>
leta =[1,2,3]<br></span>
letb =a[0..&lt;5]<br>
print(b)<br>
<br>
</blockquote>
In the swift-3-indexing-model branch<br>
&lt;<a href="https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/Range.swift#L94" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/Range.swift#L94</a>&gt;,<br>
you can /clamp/ a range just like you could clamp intervals in Swift 2. So<span><br>
the following will work in the way you preferred:<br>
<br>
     let b = a[a.indices.clamped(to: 0 ..&lt; 5)]<br>
<br>
It was suggested to extend `Collection` with a subscript like `a[safe: 0<br>
..&lt; 5]` which resembles the current subsequence subscript<br></span>
&lt;<a href="https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/Collection.swift#L82" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/swift-3-indexing-model/stdlib/public/core/Collection.swift#L82</a>&gt;. Alternatively,<span><br>
we could bring collections even closer to ranges by extending them with the<br>
equivalent `.clamped(to:)` method:<br>
<br>
     let b = a.clamped(to: 0 ..&lt; 5) // &quot;safe&quot; subsequence<br>
<br>
— Pyry<br>
<br>
<br>
<br></span><span>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br>
</span></blockquote><div><div>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</div></div></blockquote></div><br></div></div></div>