Должен ли я объявить переменную в классе private, когда она используется более чем в одной области действия функции? - PullRequest
0 голосов
/ 29 апреля 2018

Допустим, у меня есть три метода:

Метод 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 вместо этого, чтобы установить QString currentDate в class private.

Метод 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);
    }
};

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Если currentDate будет вычислено один раз в конструкторе, то значение будет неизменным в течение времени жизни переменной.

В этом случае, если переменная не будет жить в течение нескольких дней, тогда нет проблем.

Но если это произойдет (например, 23:59:59 -> 00:00:00), тогда правильным способом будет объявление функции:

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

Подумайте о том, чтобы сделать эту функцию статичной, так как она не вызывает никаких функций и переменных из класса.

0 голосов
/ 29 апреля 2018

Люди правы, говоря, что переменные должны объявляться локально, когда это возможно, поскольку это может устранить потенциальные конфликты между различными переменными в будущем (это становится проблемой, особенно в больших проектах с тысячами строк кода).

Я бы определил QString currentDate вне ваших function с, а затем предоставил бы его в качестве аргумента function_1() и function_2(), поскольку это удалит повторение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...