压痕总是应该最小化吗?

时间:2015-01-19 09:34:56

标签: coding-style indentation conventions

我想听听您对最小化缩进是否合适的看法。

我通常这样做,处理问题:

int foo_a() {
    if (!check_value(x)) {
        // error
        return false;
    }
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    return true;
}

另一方面,我也看到了这样的代码:

int foo_b() {
    if (!check_value(x)) {
        // error
        return false;
    } else {
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        return true;
    }
}

int foo_c() {
    if (check_value(x)) {
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        return true;
    } else {
        // error
        return false;
    }
}

但这可能会产生反作用,因为如果每次检查都会创建一个新的其他分支,那么这些意识就会变得非常大。

另一方面,对于决策,例如蔬菜或肉类,我通常这样做:

int foo_d(FOOD food) {
    if (food.isVegetable) {
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        return;
    } else {
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        return;
    }
    // assume here is NO shared code which is always executed for both food types.
}

但是就像foo_a()那样,它应该是这样的:

int foo_e(FOOD food) {
    if (food.isVegetable) {
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        // do stuff
        return;
    }

    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    // do stuff
    return;
}

1 个答案:

答案 0 :(得分:0)

这只是风格问题,但我会选择更少代码和更少缩进的方式。

如果通过提取函数来缩短函数,无论您选择哪个函数,它都应该是可读的。 e.g:

int foo_e(FOOD food) {
    if (food.isVegetable)
        return foo_vegetable(food);

    return foo_meat(food);
}