[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