> On Feb 3, 2017, at 2:58 PM, Ben Cohen <ben_co...@apple.com> wrote:
> 
> 
>> On Feb 3, 2017, at 11:12 AM, Erica Sadun via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> I believe what people *want* is `indexed` over `enumerated`, and 
>> consistently for both array and array slices.
>> 
> 
> I don’t know if that’s true.
> 
> Here’s an example (the only use of enumerated) from Alamofire:
> 
> let acceptLanguage = Locale.preferredLanguages.prefix(6).enumerated().map { 
> index, languageCode in
>     let quality = 1.0 - (Double(index) * 0.1)
>     return "\(languageCode);q=\(quality)"
> }.joined(separator: ", ")
> 
> Here the intent is a counter, not indices. They just happen to be the same. 
> But if they’d used indexed() it would certainly hurt readability, albeit 
> midly.
> 
> Suppose there wasn’t an enumerate or an indexed, and zipped was the standard 
> way of doing it. That might lead to another solution:
> 
> let qualities = stride(from: 1.0, to: 0.4, by: -0.1)
> let acceptLanguage = Locale.preferredLanguages.zipped(with: qualities).map {
>     languageCode, quality in "\(languageCode);q=\(quality)"
> }.joined(separator: ", ")
> 
> The use of stride here feels more what was intended, rather than backing into 
> the quality via an “index” value. And avoids any risk with indexed of this 
> getting applied incorrectly to slices.
> 

I think enumerated as it stands is an attractive nuisance / moral hazard. Most 
of the language learners I interact with miss the point and the nuance of how 
it works.

let list = [0, 1, 2, 3, 4]
let slice = list[2...3]
for (idx, value) in slice.enumerated() {
    print(idx, value)
}

I think people would not expect 0, 2 / 1, 3. I also don’t think they’d expect 
the actual outcome from a dictionary, whether index or enumeration because 
there’s no inherent semantic “enumeration” of dictionary values:

 
let dict = [0:"a", 1:"b", 2:"c"]
for (idx, value) in dict.enumerated() {
    print(idx, value)
}

0 (2, "c")
1 (0, "a")
2 (1, "b")

I’d like to see enumerated gone and I have a mild preference for introducing 
indexed, either under its own name or as a new behavior for enumerated 
(although T where T.Iterator.Element is Int)

120 gists with “enumerated”, of which a casual scan shows that almost none of 
them are actually using it meaningfully. (Take a look.) I think I did this API 
right: https://api.github.com/search/repositories?q=enumerate+language:swift 
<https://api.github.com/search/repositories?q=enumerate+language:swift> and if 
so, not much in repos.


_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to