Когда вы должны использовать метод для возврата значения? - PullRequest
4 голосов
/ 29 ноября 2011

Я довольно новичок в Java, поэтому извините за вопрос, который может показаться глупым.

Я пишу простую программу 'user login'.Чтобы проверить, совпадают ли имя пользователя и пароль, я мог бы либо использовать простую логическую переменную, либо использовать логический метод и вернуть значение как true или false.

public boolean match() {
    if(userField.getText().equals(testUser)&&passField.getText().equals(testPass))
        return true;
    else
        return false;
}

Выше приведен очень простой пример использования логического значения.method.

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

Ответы [ 8 ]

3 голосов
/ 29 ноября 2011
  1. Используйте метод, чтобы подклассы могли переопределять и определять свои собственные соответствия.
  2. Вы должны всегда держать поля / переменные-члены частными и предоставлять доступ к ним через методы.

В идеале вы должны абстрагировать метод match от интерфейса и иметь реализации, переопределяющие match () метод

2 голосов
/ 29 ноября 2011

ALT 1: вернуть логическое значение

PRO: Это хорошо, чтобы пропустить другие части кода, которые не нужны для запуска.

CON: Это добавляет более одной точки возврата и должно использоваться только в методах с несколькими строками.

public boolean match() {
   if(!userField.getText().equals(testUser)
      && !passField.getText().equals(testPass)){
     return false;
   }
   //do additional stuff here if user matches
   return true;
}

ALT 2: вернуть переменную

PRO: Это хорошо в более длинном методе, где переменная возврата может быть изменена в нескольких местах.

CON: Обычно вы делаете это, когда у вас есть методы, которые выполняют несколько задач, а в вашем коде отсутствует разделение задач.

public boolean match() {
   boolean result;
   if(...){
       if(userField.getText().equals(testUser)&&passField.getText().equals(testPass))
          result = true;
       else if (...)
          result = false;
       else if (...)
          result = true;
   } 

   //do something
   if (...)
       result = true;
   else 
       result = false;
   } 
   return result;
}

ALT 3: возвращает результатфункция или набор функций

PRO: Это хорошо для сохранения строк кода

CON: Для удобства чтения вы должны переименовать метод, чтобы сказать, что этот метод на самом деле делает.

public boolean authenticate(user) {
   return userField.getText().equals(testUser)&&passField.getText().equals(testPass));
}
2 голосов
/ 29 ноября 2011

В этом случае вы должны полностью переписать его так:

public boolean match() {
    return userField.getText().equals(testUser)
        && passField.getText().equals(testPass);
}
1 голос
/ 29 ноября 2011

Это зависит от читаемости и возможности повторного использования кода, который вы пишете.В вашем случае я бы предпочел использовать метод.Если вы используете цепочечные методы и логическую логику, как вы используете, используйте метод для удобочитаемости.JVM, вероятно, в любом случае встроит вызов, поэтому не будет никакого снижения производительности. Я бы изменил использование оператора if и именования, чтобы лучше отразить назначение метода (и использование соглашений об именах JavaBean).Ваш код может быть легко упрощен следующим образом:

public boolean isCorrectUserAndPassword() {
    return userField.getText().equals(testUser) && passField.getText().equals(testPass));
}
0 голосов
/ 29 ноября 2011

Переменная добавляет свойство к классу (если оно не локально), тогда как метод добавляет поведение многократного использования.Даже если не имеет смысла сравнивать переменную и метод, практическое правило - используйте переменную для хранения значения и метод для выполнения связки связанных операторов.

В вашем случае каждый раз, когда вы вызываете match метод, он не только возвращает значение boolean, но также выполняет некоторые проверки, прежде чем он возвращает либо true, либо false.Но, если бы это была переменная boolean, она могла бы содержать только значение boolean true или false, но не могла бы выполнять никаких операторов.

0 голосов
/ 29 ноября 2011

В идеале, на самом деле лучше повторно использовать код, если вы используете логический метод,

потому что вы можете использовать один и тот же метод сопоставления много раз и даже для многих целей

0 голосов
/ 29 ноября 2011

Мы обычно используем методы, потому что делали что-то неоднократно. В этом случае вы будете проверять, совпадают ли пароль и имя пользователя, и вы будете делать это несколько раз по всей вашей программе. Поэтому я бы использовал метод, потому что доступ к переменной boolean может быть затруднен и может стать грязным. Поэтому я предлагаю использовать метод в тех случаях, когда вы делаете что-то неоднократно (и когда это процедура) и использовать переменные как отдельную процедуру, а не как процедуру.

0 голосов
/ 29 ноября 2011

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

...