Какой код более читабелен? - PullRequest
32 голосов
/ 09 октября 2009

Предположим, у меня есть два метода bool Foo() и bool Bar(). Что из следующего более читабельно?

if(Foo())
{
    SomeProperty = Bar();
}
else
{
    SomeProperty = false;
}

или

SomeProperty = Foo() && Bar();

С одной стороны, я считаю короткое замыкание && полезной функцией, а второй пример кода намного короче. С другой стороны, я не уверен, что люди обычно привыкли видеть && вне условного утверждения, поэтому мне интересно, не привел бы ли это к некоторому когнитивному диссонансу, который сделает первый образец лучшим вариантом.

Что вы думаете? Есть ли другие факторы, которые влияют на решение? Например, если выражение && длиннее, чем одна строка, которая может уместиться на экране, я должен предпочесть первое?


Пояснения после ответа:

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

  • Bar() может быть дороже, чем Foo(), но ни у одного метода не должно быть побочных эффектов.
  • Оба метода названы более правильно, не так, как в этом примере. Foo() сводится к чему-то вроде CurrentUserAllowedToDoX() и Bar() больше похоже на XCanBeDone()

Ответы [ 21 ]

0 голосов
/ 09 октября 2009

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

if(Foo() == true and Bar() == true)
then
    SomeProperty = true;
else
    SomeProperty = false;

гораздо лучше читается, чем

SomeProperty = Foo() && Bar();

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

...