3

我想知道声明变量只是为了使代码(例如 if 语句中的长条件)更具人类可读性,或者这是否会浪费资源并使用详细的注释更好?

这是一个简单的例子。

//declare variables for if statement only
int price = getProductionCost() + getTax() + getPurchaseMethod() + etc + etc;
int shipping = getLocation() + getShippingType() + etc;

if (price + shipping > 1000)
{
    // Is this better practice using variables?
}

// if price + shipping > 1000
if (getProductionCost() + getTax() + getPurchaseMethod() + etc + etc + getLocation() + getShippingType() + etc > 1000)
{
    // or is this option better practice with commenting and no variables?
}

我也知道存在以相同方法修改变量的风险,这是一个缺点。我试图寻找这方面的最佳实践,但找不到任何东西,也不确定要搜索什么。谢谢你。

4

5 回答 5

4

我认为这种方式更好:

if (price + shipping > 1000)
{
    // Is this better practice using variables?
}

但是你应该用大写的第一个符号写你的方法名称:

// Like this
GetProductionCost()

// Not like this
getProductionCost()
于 2015-09-14T11:32:53.083 回答
3

使用注释的危险在于它们可能会过时。考虑将阈值更改为 1100,但忘记更改注释的情况:

// if price + shipping > 1000
if (getProductionCost() + getTax() + getPurchaseMethod() + etc + etc + getLocation() + getShippingType() + etc > 1100)
{
    //
}

现在看代码的人不知道错误是在注释中,还是在代码中。

出于这个原因,最好使用易于阅读的代码而不是带有注释的难以阅读的代码。

您可以通过将计算拆分为自己的方法来进一步增强代码,而不是使用局部变量并使用 1000 的常量:

public void SomeMethod()
{
    if (CalculatePrice() + CalculateShipping() > CostThreshold)
    {
        // do something
    }
}

...

private static int CalculatePrice() => getProductionCost() + getTax() + getPurchaseMethod() + etc + etc;
private static int CalculateShipping() => getLocation() + getShippingType() + etc;
于 2015-09-14T11:23:12.300 回答
3

通常,如果您添加注释,您也可以简单地使您的代码不言自明,这样就不需要注释了。话虽如此,您应该始终考虑使变量自言自语以增强对代码的理解。

然而,保持一个冗长复杂的表情可能会非常糟糕。因此,为了便于维护,您还应该考虑将代码拆分为更小、更易于阅读的部分。

于 2015-09-14T11:09:00.003 回答
1

我会选择变量以使 if 语句看起来更干净。

阅读代码的频率高于编写代码的频率,但也没有什么能阻止你写评论。只是不要过度!

于 2015-09-14T11:10:31.697 回答
0

if 条件将始终出现在方法块中,并且创建局部范围变量很好。关于您提到的风险:我认为这不是风险,因为根据“最佳实践”,我们不会创建很长的方法,简而言之,我们不会误认为不需要修改的变量。此外,您可以在变量上写注释,以便其他打算修改代码的开发人员知道他在做什么/为什么要这样做。PS:添加评论总是好的,把它们放在你认为可以评论的地方。

于 2015-09-14T11:20:13.437 回答