Udostępnij za pośrednictwem


Стиль отвечает семантике

Какой стиль лучше?

bool abc;
if (Foo())
  abc = Bar();
else
  abc = false;

или

bool abc = Foo() && Bar();

?

Для меня выбор сводится к ответу на вопрос: «метода Bar полезен только ради получения возвращаемого значения или также и для выполнения некоторых побочных эффектов?» Выбор стиля должен в основном основываться на желании ясной передачи семантики участка программы.

Загадочные имена усложняют, а не упрощают этот выбор. Предположим, что на самом деле выбор был бы между следующими вариантами:

bool loginSuccessful;
if (NetworkAvailable())
  loginSuccessful= LogUserOn();
else
  loginSuccessful= false;

и

bool loginSuccessful= NetworkAvailable() && LogUserOn();

В этом случае я всегда выберу первый вариант, поскольку я хочу, чтобы метод LogUserOn был отдельным выражением. Выражение подчеркивает «У меня есть полезные побочные эффекты». Выражение подчеркивает порядок выполнения и предоставляет удобные места для установки точек останова.

Однако если выбор будет между:

bool canUseCloud;
if (NetworkAvailable())
canUseCloud = UserHasFreeSpaceInCloud();
else
canUseCloud = false;

и

bool canUseCloud = NetworkAvailable() && UserHasFreeSpaceInCloud();

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

Оригинал статьи