Помещает ли метод с логическим возвратом внутри if функционально эквивалентный прямой вызов метода? - PullRequest
2 голосов
/ 27 февраля 2012

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

С точки зрения строго работающего метода validateFile, это:

validateFile(filename);

функционально эквивалентно этому?(при условии, что я изменяю тип возвращаемого значения на логический и правильно подставляю операторы возврата)

if(validateFile(filename)){
   passCount++;
}

Если это эквивалентно, есть ли причина (лучшие практики и т. д.), что я не должен этого делать?

Ответы [ 7 ]

4 голосов
/ 27 февраля 2012

Да, это эквивалентно. Нет, я не могу думать о том, что вы не должны этого делать.

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

if (a() && b());

В этом случае b() будет вызван тогда и только тогда, когда a() вернет true.

3 голосов
/ 27 февраля 2012

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

Вы также можете сделать то же самое в одной строке, например:

passCount += validateFile(filename) ? 1 : 0;
1 голос
/ 27 февраля 2012

Да, это эквивалентно.Это как:

boolean result = validateFile(filename);
if(result){
   passCount++;
}
1 голос
/ 27 февраля 2012

Да, это будет работать.

Вызов методов таким способом довольно стандартен.

1 голос
/ 27 февраля 2012

Да, if(validateFile(filename)) будет работать validateFile(filename) в обычном режиме. Как только он вернется & mdash; при условии, что он возвращается нормально (в отличие от выдачи исключения) & mdash; возвращаемое значение будет использовано точно так, как вы ожидаете.

1 голос
/ 27 февраля 2012

У последнего лучше разделение интересов.Я бы предпочел это.

1 голос
/ 27 февраля 2012

Да, ваш код будет работать таким образом, он скомпилируется. И на самом деле это лучший способ добиться этого, большую часть времени.

EDIT: при условии, что в первом случае вы привязываете его к переменной и помещаете его в if. Иначе, не так много, первый не сработает.

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