Hi Derrick,

Not just for optional array, but for all optional types. Optional.map has a 
deep confusion for we’re not sure what is $0 inside. And it is so commonly used 
compared to the collection of collection scenario mentioned by Alexis 
Beingessner.

- Jay Zhao

> On 7 Dec 2016, at 10:58, Derrick Ho <[email protected]> wrote:
> 
> Jay, I fail to see the point you are trying to make.  Can you clarify why we 
> need a new map method for an optional array of elements?
> 
> On Tue, Dec 6, 2016 at 9:46 PM Jay Zhao via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> It applies in theory to think Optional as a collect of one and for that 
> reason map is a perfect name.
> 
> But in practice, we often use the same variable name for array and array? .  
> So when you see :
>               cars.map({...$0...})  
> You can not tell which map and even worse which $0 it is.
> 
> According to Swift API Design Guidelines #1, Clarity at the point of use. 
> And to combine theory and practice, I propose mapUnwrapped to remove the 
> confusion.
> 
> Actually this is what’s been adopted in my company:
> 
> public extension Optional {
>     /// Pass the `Optional` into the closure that returns `Non-Optional`
>     public func mapUnwrapped<U>(_ transform: (Wrapped) throws -> U) rethrows 
> -> U? {
>         return try map(transform)
>     }
> }
> 
> To summary my idea:
> This is the situation where usability > design purity for a language(a tool).
> 
> 
>> On 7 Dec 2016, at 08:05, Robert Widmann <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> If you think of Optional as a zero-or-one element collection there's really 
>> no reason this operation should be named any differently.  It still lifts a 
>> function over values to one over Optionals.  It still extracts the contents 
>> of the structure and applies the function (propagating failure if 
>> necessary).  The operation is no different from the one required of a plain 
>> Sequence conformance, why should it have a new name if it is not a new 
>> operation? 
>> 
>> ~Robert Widmann
>> 
>> 2016/12/05 22:46、Jay Zhao via swift-evolution <[email protected] 
>> <mailto:[email protected]>> のメッセージ:
>> 
>>> Hi there,
>>> 
>>> Code explains everything:
>>> 
>>>     
>>> 
>>> /// Maybe a bad API naming in Swift? See below:
>>> 
>>>         /// array1 can be array of any object that have a `count` method
>>>         let array1 = [[String]]()
>>>         let array2 :[String]? = nil
>>>         
>>>         
>>>         // I believe the confusion between `array.map` and 
>>> `optionalArray.map` is really bad.
>>>         // Because when you read code like this, you can not tell which is 
>>> which:
>>>         _ = array1.map({$0.count})
>>>         _ = array2.map({$0.count})
>>>         
>>>         // It can be clearer:
>>>         // 1, we pass `self.element` into the closure
>>>         _ = array1.map({$0.count})
>>>         // 2, we pass self directly into the closure
>>>         _ = array2.mapMe({$0.count})
>>> 
>>> 
>>> The mapFlat method is also problematic.
>>> 
>>> Yours,
>>> Jay Zhao
>>> _______________________________________________
>>> 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