[swift-evolution] Proposal: Add .times method to Integer type

Radosław Pietruszewski radexpl at gmail.com
Fri Dec 18 13:10:18 CST 2015


I’m +1. It’s not something that’s super common, but `100.times { … }` expresses the intention far better than the rather cryptic `for _ in 0..<100 { … }`.

The only possible concern — and this has been expressed in the proposal to remove `forEach` — is that closures have different semantics than `for`. Mostly, if someone wants to return from a containing function, you can’t do that from a closure.

— Radek

> On 18 Dec 2015, at 19:38, Cihat Gündüz via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I agree with both of you about the alternative implementations.
> 
> That’s exactly what I’d love to see integrated to the standard library like Ruby is here:
> http://ruby-doc.org/core-2.2.4/Integer.html#method-i-times <http://ruby-doc.org/core-2.2.4/Integer.html#method-i-times>
> 
> My main problem is that it neither looks clean nor readable especially for beginners that there is an underscore in the closure. Also beginners often get confused with the number of times some code is run when starting to count from 0 which is also why I think it shouldn’t appear. The .times method would solve both of these problems.
> 
>> Am 18.12.2015 um 19:33 schrieb Etan Kissling <kissling at oberon.ch <mailto:kissling at oberon.ch>>:
>> 
>> (or with a for in loop  -- but i guess you have a reason for using .foreach)
>> 
>>         for _ in 0..<5_000 {
>>             print("asdf")
>>         }
>> 
>> 
>>> On 18 Dec 2015, at 19:31, Etan Kissling via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>> 
>>> You don't need stride for this.
>>> 
>>>     func foo() {
>>>         (0..<5_000).forEach { _ in
>>>             print("asdf")
>>>         }
>>>     }
>>> 
>>> 
>>>> On 18 Dec 2015, at 19:25, Cihat Gündüz via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>> 
>>>> Dear Swift-Community,
>>>> 
>>>> I’d like to propose an addition of a useful method, especially for beginners that also makes Swift much more readable in some situations: The addition of a .times method to Integer type(s).
>>>> 
>>>> For example recently in one of my projects I wanted to test the scalability of an important piece of code and wrote this method:
>>>> 
>>>>     func testPerfQualityInPercentWithoutQualityImprovements() {
>>>>         self.measureBlock {
>>>>             let expectedQuality = 33.33
>>>>             0.stride(to: 5_000, by: 1).forEach { _ in
>>>>                 XCTAssertEqualWithAccuracy(self.crossword.qualityInPercent, expectedQuality, accuracy: 0.1)   
>>>>             }   
>>>>         }
>>>>     }
>>>> 
>>>> As you can see what I basically wanted was to repeat the test some thousand times. I also like to use the Ruby language and one thing I love about it is that it has some really handy methods integrated to the language in situations like this which make the code very readable and therefore fun to use.
>>>> 
>>>> I’m an even bigger fan of Swift so I’d love to see such useful methods appear in Swift, too and this is the first I came across that I really missed. So I’m asking myself, what if I could write the same code above like this:
>>>> 
>>>>     func testPerfQualityInPercentWithoutQualityImprovements() {
>>>>         self.measureBlock {
>>>>             let expectedQuality = 33.33
>>>>             5_000.times {
>>>>                 XCTAssertEqualWithAccuracy(self.crossword.qualityInPercent, expectedQuality, accuracy: 0.1)   
>>>>             }   
>>>>         }
>>>>     }
>>>> 
>>>> I think it could be added to the Swift standard library very easily (for example by using the .stride method like I used) without any side effects and has enough advantages to be part of Swift itself. What do you think?
>>>> 
>>>> I wish you all the best,
>>>> Cihat
>>>> 
>>>> 
>>>> P.S.: This is my very first mail in such a mailing list so I did everything correctly. ^.^
>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
> 
>  _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151218/4b8770fc/attachment.html>


More information about the swift-evolution mailing list