Когда использовать переменную поля? - PullRequest
0 голосов
/ 20 августа 2010

При каких обстоятельствах вы бы использовали переменную поля вместо локальной переменной? Мне было трудно определить, когда переменная используется в 2 или более методах в классе. Я склонен использовать локальные переменные и передавать их другому методу.

Спасибо

Сара

Ответы [ 4 ]

7 голосов
/ 20 августа 2010

В объектно-ориентированных терминах имеет ли значение переменная как атрибут объекта?Если это так, вы должны сделать его переменной поля.Если нет, то это может пойти в любую сторону.

Помните принцип единой ответственности - хорошо спроектированные классы должны иметь только 1 ответственность, и, следовательно, только 1 причину для изменения.

7 голосов
/ 20 августа 2010

Поле обозначает какое-то состояние, связанное с экземпляром вашего класса.Например, BankAccount может иметь поле balance.

Никогда не следует использовать поле для упрощения передачи данных из одного метода в другой метод.Это просто не его цель.Это также делает ваши методы по своей природе потокобезопасными или требуют синхронизации.

Локальная переменная - это просто временное хранилище данных, используемое для поддержки операции, выполняемой методом.Например,

public void addInterest(double rate) {
    double toAdd = rate * balance;
    logTransaction("Interest", toAdd);
    balance += toAdd;
}

toAdd здесь не имеет смысла как поле, так как оно является временным для операции, а не частью состояния учетной записи.

1 голос
/ 20 августа 2010

Я бы определенно не передавал переменные другим методам, если бы не было очень конкретной причины. Если переменная используется в классе несколько раз, сделайте ее переменной поля. Это почти всегда делает ваш код более гибким.

В общем, вы также можете подумать, имеет ли переменная смысл как часть класса. То есть имеет смысл иметь класс Car с переменной numOfMiles, даже если он используется только несколько раз. Однако, если один из методов - int GetAmountOfGasUsed(int milesThisTrip), имеет смысл передать переменную в милях как локальную переменную, поскольку расстояние, которое вы проезжаете, вероятно, не относится к автомобилю.

0 голосов
/ 20 августа 2010

Если методы, использующие переменную, также должны изменить значение, то непременно сделайте его переменной поля.Но, если они только читают значение, вы можете безопасно передать его.

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