2014-06-14 33 views
1

我只是在实践面向对象的设计。这是一个简单的预算计算器。我能做些什么来使代码更干净,更干?如果我没有记错,这是Ruby约定有简洁的类和函数。虽然我的职能很短,但班级本身很大。我该如何重构这些简单的功能,并让它们更干?

我看到我在几个地方除以12。可以干吗?

class Dylan 
    def salary 
    80000 
    end 

    def tax_rate 
    0.28 
    end 

    def net_salary 
    (1 - tax_rate) * salary 
    end 

    def monthly_budget 
    net_salary/12.0 
    end 

    def car_payment 
    457.0 
    end 

    def car_insurance 
    2600/12.0 
    end 

    def gas 
    2400/12.0  
    end 

    def rent 
    2000 
    end 

    def food 
    300 
    end 

    def left_with 
    monthly_budget - car_insurance - car_payment - gas - rent - food 
    end 
end 

d = Dylan.new 

p d.left_with 
+0

都是静态值吗?如果有些是静态的,告诉哪一个? –

+0

你究竟是什么意思静态? @SachinSingh –

+0

我的意思是不变的,租金将永远是2000等? –

回答

0

尝试了这一点:

class Dylan 
    SALARY = 80000 
    TAX_RATE = 0.28 
    CAR_PAYMENT = 457.0   
    CAR_INSURANCE = 2600/12.0 
    GAS = 2400/12.0 
    RENT = 2000 
    FOOD = 300 

    def net_salary 
    (1 - TAX_RATE) * SALARY 
    end 

    def monthly_budget 
    net_salary/12.0 
    end 

    def expenditure 
    CAR_INSURANCE + CAR_PAYMENT + GAS + RENT + FOOD 
    end 

    def remaining_income 
    monthly_budget - expenditure 
    end 
end 

d = Dylan.new 

p d.remaining_income 

由于工资是类常量可以通过范围解析操作符得到它。

Dylan::SALARY => 80000 

希望这会有所帮助。

+0

检查更新的答案。 –

+0

谢谢!我喜欢你将所有成本合并到支出函数中。 –

+0

出于好奇,有没有办法从对象中获取SALARY值?像'd.SALARY#=> 80000' –