当变量在多个函数作用域中使用时,我应该在类 private 中声明该变量吗?



假设我这里有三种方法:

方法1:

void function_1() {
    QString("%1").arg(QDate::currentDate().toString("MM/dd/yy"));
}
void function_2() {
    QString("%1").arg(QDate::currentDate().toString("MM/dd/yy"));
}

因为我可能要替换多个参数,那么这一行会很长,为了使函数更具可读性,我使用了方法 2:方法 2:

void function_1() {
    QString currentDate = QDate::currentDate().toString("MM/dd/yy");
    QString("%1").arg(currentDate);
}
void function_2() {
    QString currentDate = QDate::currentDate().toString("MM/dd/yy");
    QString("%1").arg(currentDate);
}

但是我注意到,在我的许多函数中需要使用QString currentDate,即使有些人说Variables should be declared as locally as possible,如果我这样做,这意味着我必须在每个函数中编写相同的代码。所以我应该使用方法 3 代替在 class private 中设置QString currentDate.

方法3:

class Foo {
public:
    Foo() {
        currentDate = QDate::currentDate().toString("MM/dd/yy");
    }
private:
    QString currentDate;
    void function_1() {
        QString("%1").arg(currentDate);
    }
    void function_2() {
        QString("%1").arg(currentDate);
    }
};

人们说变量应该尽可能在本地声明是正确的,因为这可以消除将来不同变量之间的潜在冲突(这成为一个问题,尤其是在具有数千行代码的大型项目中(。

我会在您的function之外定义QString currentDate,然后将其作为参数提供给function_1()function_2(),因为这将消除代码的重复。

如果在构造函数中计算一次currentDate,则该值在变量的生存期内将保持不变。

在这种情况下,如果变量不会跨天生存,那么没问题。

但如果它会(例如 23:59:59 -> 00:00:00(,那么正确的方法是声明一个函数:

 QString currentDate() 
 {
    return QDate::currentDate().toString("MM/dd/yy");
 }

请考虑将此函数设为静态函数,因为它不会从类调用任何函数和变量。

最新更新