Обычная практика? - PullRequest
       5

Обычная практика?

2 голосов
/ 06 августа 2011

Мне было интересно, является ли этот сокращенный вариант, если можно так назвать, общепринятой практикой кодирования среди профессиональных разработчиков PHP:

foo() && bar();

вместо

if( foo() ) {
    bar();
}

Хотя в ИМО однострочный код гораздо удобнее, я не видел его где-либо еще.

Ответы [ 4 ]

3 голосов
/ 06 августа 2011

Это обычная практика среди разработчиков нескольких языков.С технической точки зрения в этом нет ничего плохого, но, судя по тому, сколько раз он появляется в StackOverflow, я скажу, что это «использование только тогда, когда это единственное, что имеет смысл».Большинство людей этого не ожидают.

Тем не менее, это совершенно верно:

foo()?bar()?bat():zonk():baz();

Как и

foo() && bar() && baz();

Просто запомните:

function foo(){return true;} 
function bar(){echo "bar";} 
function baz(){echo "baz";  return 2;} 
echo foo()||foo()?baz():baz(); // baz2
1 голос
/ 06 августа 2011

foo() && bar(); - логическое выражение, поэтому неправильно, если вы не поместите его в логический контекст (условие типа if, while и т. Д.).

Код должен рассказывать «историю» решаемой проблемы, использование этого ярлыка не говорит об истории. Это безобразный хак, это не элегантно.

Если вы думаете об этом как о "аккуратном", значит, вы еще не достигли точки, где код означает идеи , а не код.

1 голос
/ 06 августа 2011

Самая важная часть - это то, что вы пишете код, который легко читается. Использование имен функций, таких как, например, foo() и bar(), совершенно бесполезно, поэтому трудно сказать, какая из двух, которые вы хотите сравнить, лучше.

Кроме того, в примере if есть и существенные недостатки:

  • if - это языковая конструкция, но вы используете ее как функцию.
  • Вы добавляете вертикальное пространство в условие if. Это может затруднить чтение, поскольку пробелы влияют на визуальный фокус.

Альтернативное предложение будет:

if (foo()) {

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

   conditionMet() && gotForIt();

   if (conditionMet()) goForIt();

Решите сами. Просто не смешивайте одну строку с другой, поэтому придерживайтесь одного стиля в своем коде.

1 голос
/ 06 августа 2011

Лично я не вижу в этом ничего плохого. Он довольно широко распространен, поэтому большинство программистов на PHP поймут его так же хорошо, как и расширенную версию, что делает его совершенно приемлемым.

...