I totally agree with Javier here. There is nothing obvious about nil being < or 
> than a non-nil value. As it's not obvious at all, having a default behaviour 
can be very surprising. i much prefer the explicitness that the proposal 
brought.

> On 27 Aug 2016, at 16:07, Javier Soto via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> My biggest issue with Optional conforming to Comparable is that while a 
> default implementation may sometimes be useful, it may not necessarily be the 
> one you want. In that last example with lastName, if you wanted to change the 
> policy for whether users without last name appear first or last, you'd have 
> to write more verbose code anyway. Generally, reading that code with just "<" 
> I would never remember what Swift would do with nil (do they go first or 
> last?)
> 
> If you don't care that much, a simple one-liner without all those guards 
> could also be:
> 
> users.sorted { ($0.lastName ?? "") < ($1.lastName ?? "") }
>> On Sat, Aug 27, 2016 at 6:58 AM Charlie Monroe via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> I have personally (ab)used this for the following:
>> 
>> class User {
>>      var email: String
>>      var firstName: String?
>>      var lastName: String?
>> }
>> 
>> You have a list of users based on email, so last name is optional. In Swift 
>> 2.x, you can do:
>> 
>> users.sort({ $0.lastName < $1.lastName })
>> 
>> Now, you need to do:
>> 
>> users.sorted({
>>      guard let firstName = $0.0.lastName else {
>>              return true
>>      }
>>      
>>      guard let secondName = $0.1.lastName else {
>>              return false
>>      }
>>      
>>      return firstName < secondName
>> })
>> 
>> Which aside from being a brain teaser how to properly maintain ordering when 
>> $0.0's lastName != nil && $0.1's lastName == nil, adds additional few lines.
>> 
>> But I agree that it may come as confusing with Ints, etc. - with strings it 
>> kind of makes sense since nil is like an empty string which is placed in 
>> front of everything.
>> 
>>>> On Aug 27, 2016, at 1:46 PM, Haravikk via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> 
>>>> On 27 Aug 2016, at 02:01, Kevin Ballard via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> This change is going to have a HUGE impact for me. I use this sort of 
>>>> comparison _all the time_ and find it incredibly useful, and have had 
>>>> literally zero bugs caused by this. Surely I can't be the only one who 
>>>> uses this. I am not looking forward to copying & pasting a 
>>>> reimplementation of the comparison functions into every single project I 
>>>> work on.
>>> 
>>> Can you give some examples as to how this will have such a huge impact? Now 
>>> that we have the ?? operator it seems that this is fairly easy to replace:
>>> 
>>>     value < 5 // where value is of type Int?
>>> 
>>> With:
>>> 
>>>     (value ?? 0) < 5
>>> 
>>> 
>>> The latter is completely clear what the behaviour of nil is.
>>> 
>>> Also, you can still re-add the operators where you need them, ideally with 
>>> as limited a type as possible so you can make sure that it's behaviour is 
>>> well defined.
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> -- 
> Javier Soto
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to