[swift-evolution] [Pitch] Add the sign method to the SignedNumberType protocol.

David Sweeris davesweeris at mac.com
Mon May 23 23:09:13 CDT 2016


Can we make it RawRepresentable? That way signum can just return self.rawValue

Sent from my iPhone

> On May 23, 2016, at 06:05, Charlie Monroe via swift-evolution <swift-evolution at swift.org> wrote:
> 
> The clean way would be to make it an enum with var signum that would return -1, 0, 1:
> 
> enum IntegerSign<NumberType: SignedNumberType> {
> 
>     case Negative
>     case Zero
>     case Positive
> 	
>     var signum: NumberType {
>         switch self {
>         case .Negative:
>             return -1 as NumberType
>         case .Zero:
>             return 0 as NumberType
>         case .Positive:
>             return 1 as NumberType
>         }
>     }
> 	
> }
> 
> extension SignedNumberType {
>     var sign: IntegerSign<Self> {
>         if self == 0 {
>             return .Zero
>         } else if self > 0 {
>             return .Positive
>         } else {
>             return .Negative
>         }
>     }
> }
> 
> Charlie
> 
>> On May 23, 2016, at 9:29 AM, Haravikk via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Could you give an example of this method’s usage? Surely your value is either positive, negative or zero already, so this method doesn’t return anything more useful.
>> 
>> In other words, anywhere that I might do this:
>> 
>> 	if myValue.sign > 0 { … }
>> 
>> I could just as easily do:
>> 
>> 	if myValue > 0 { … }
>> 
>> To the same end result surely? Unless I’m missing something it seems redundant.
>> 
>> If there is a use-case for this, would it make more sense to have the return type as an enum with cases for Positive, Negative and Zero?
>> 
>>> On 22 May 2016, at 08:07, Adam Nemecek via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> Howdy,
>>> I think that the SignedNumberType should implement a method called sign that will return -1 for negative numbers, 0 for 0 and 1 for positive numbers. This is similar to the signum method in e.g. Java and similarly called methods in other languages.
>>> 
>>> The implementation is fairly straight forward
>>> 
>>> extension SignedNumberType {
>>>   var sign: Self {
>>>     if self == 0 {
>>>       return 0
>>>     }
>>>     else if self > 0 {
>>>       return 1
>>>     }
>>>     return -1
>>>   }
>>> } 
>>> 
>>> I was trying to implement is without branching by doing (x > 0) - (x < 0) but I couldn't get the types right so I'm open to suggestions.
>>> 
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160523/032c643e/attachment.html>


More information about the swift-evolution mailing list