> On Oct 24, 2017, at 5:10 AM, Tino <[email protected]> wrote:
> 
> 
>> Calling "flatMap" a map + filtering out the nil values was a TERRIBLE idea.
> maybe I’m the one who’s getting this all wrong, but afaik the purpose of 
> flatMap isn’t filtering out nil at all, but just a combination of map & 
> flatten…
> Optional<T> is like Array<T> with a maximal capacity of one (so it can either 
> contain a single object, or it’s empty), and in this interpretation, there’s 
> nothing wrong with the behavior.

> 
> Instead, I think Nobuo Saito is right, and that a renaming to filteredMap is 
> only fighting symptoms, and not the cause (but I’m not that sure if there’s a 
> good way to tackle the cause).
> Besides that, all those alternative names also have potential for confusion:
> Imho it isn’t intuitive what is filtered out — and don’t forget that the 
> result of flatMap can contain nil elements…
> 
> If the biggest problem of flatMap is that people who don’t understand it 
> write code that isn’t optimal (but still does the right thing!), I don’t 
> think there is any change needed. I’m not even sure that that 
> wrapping/unwrapping is actually done, because it should be discoverable by 
> the compiler.
It can be seen that the generated SIL is more complicated for a flatMap case, 
the microbenchmark also shows that it’s about 3x slower than the map. But even 
if that can be optimized away, don’t you find a String example from the 
proposal even a little convincing?
> 
> It would be nice if there was an way to warn in places where flatMap could be 
> replaced with map, though (but imho this special warning shouldn’t be checked 
> by the compiler).
I tried to avoid renaming: https://github.com/apple/swift/pull/7823/ 
<https://github.com/apple/swift/pull/7823/> but then 
https://github.com/apple/swift/pull/9390 
<https://github.com/apple/swift/pull/9390>.
> 
> - Tino

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to