2015-07-21 88 views
1

考慮到我想要做如下計算:有沒有更好的方法來防止Ruby中的負數?

total = subtotal - discount 

因爲discount可能比subtotal更大,有像下面的代碼:

class Calculator 
    def initialize(subtotal: subtotal, discount: discount) 
    @subtotal = subtotal 
    @discount = discount 
    end 

    def total 
    [subtotal - discount, 0].max 
    end 

    private 

    def subtotal 
    @subtotal 
    end 

    def discount 
    @discount 
    end 
end 

當看到[subtotal - discount, 0].max部分或任何類似的代碼,我經常不得不停下來思考。

是否有更優雅的方式來處理這種計算?

+7

這是很優雅的,因爲它是... – potashin

+2

大概不會。你的解決方案似乎對我來說很優雅。 – Adrian

回答

1

想一想我們可以延長Numeric班嗎?

class Numeric                 
    def non_negative                
    self > 0 ? self : 0                  
    end                   
end                    

class Calculator 
    def initialize(subtotal: subtotal, discount: discount) 
    @subtotal = subtotal 
    @discount = discount 
    end 

    def total 
    (@subtotal - @discount).non_negative 
    end 
end 
0

一個普通if說法可能更容易理解:

def total 
    if discount > subtotal 
    0 
    else 
    subtotal - discount 
    end 
end 
相關問題