Who says it’s useful only for beginners?

The way I see it, it’s about expressivity. What conveys the intention better 
when you want to do something 10 times? `10.times { … }` or an iteration over a 
range from 0 to 10?

— Radek

> On 18 Dec 2015, at 20:13, Félix Cloutier via swift-evolution 
> <[email protected]> wrote:
> 
> It doesn't need to be an underscore, but when it is not, the compiler emits 
> an educative warning steering you towards _:
> 
> /tmp/test.swift:3:7: warning: immutable value 'i' was never used; consider 
> replacing with '_' or removing it
> 
> You can also use inclusive ranges instead if you're more comfortable with 
> that: 1...5000 will do just that.
> 
> I don't mean to come across as dismissive, and I'm all for an inclusive Swift 
> that you can pick up without knowing advanced concepts. However, there is 
> definitely value in helping people learn, and learning always moves you a 
> little bit out of your comfort zone. When do we remove the training wheels? 
> How long can we hide the fact that indices usually start at 0? How long 
> before you need to iterate an array using the same range-based for loop?
> 
> I spend a lot of time on Stack Overflow and I've seen lots of beginners ask 
> for lots of things, but the people who ask about the for loop are usually 
> people with a background in another C-like language who try to use the 
> arguably less readable C-like for loop. I've never seen anyone before say 
> that it looks unclean or unreadable.
> 
>> Le 18 déc. 2015 à 13:38:59, Cihat Gündüz via swift-evolution 
>> <[email protected] <mailto:[email protected]>> a écrit :
>> 
>> 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 <[email protected] 
>>> <mailto:[email protected]>>:
>>> 
>>> (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 
>>>> <[email protected] <mailto:[email protected]>> 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 
>>>>> <[email protected] <mailto:[email protected]>> 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
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>> 
>>  _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>  _______________________________________________
> swift-evolution mailing list
> [email protected] <mailto:[email protected]>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <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