Присвоение в условных выражениях

Я видел много этого вида кода недавно:

if ($foo = $bar->getFoo())
{
    baz($foo);
}

Это считают хорошей или плохой практикой?

Например, Netbeans, который IDE дает уведомлению при использовании этого вида кода:

Возможное случайное присвоение, присвоений в условиях нужно избежать

Что Вы думаете?

5
задан DuoSRX 29 March 2013 в 15:08
поделиться

3 ответа

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

  • Это недоступная идиома в других распространенных языках
  • Она менее читабельна

С другой стороны:

  • Неявные булевы преобразования не встречаются в других языках, но на них широко рассчитывают там, где они существуют. И наоборот, операторы условного присваивания существуют в Ruby и Javascript (как примеры), но не в PHP. Должны ли мы ограничивать использование языковых конструкций только теми, которые встречаются во всех похожих языках? Вероятно, нет.
  • Менее читабельные для кого?

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

4
ответ дан 18 December 2019 в 13:11
поделиться

Это простой способ скрыть ошибки, но это обычная практика в PHP. Особенно во время таких вещей, как обход каталогов, когда вы делаете такие вещи, как while (($ dir = readdir ($ handle))! == FALSE)

Если вы можете этого избежать. Избегай это.

4
ответ дан 18 December 2019 в 13:11
поделиться

Хотя это правильный синтаксис и результаты будут такими, как ожидалось, это плохая привычка. Читабельности не хватает, есть вероятность выработать плохую привычку ставить =, когда вы имели в виду ==, и ваши глаза будут постоянно возвращаться к этой строке, когда вы будете пытаться найти реальные ошибки в приложении. Я бы не использовал такой стиль написания. В этом случае просто получите возвращаемое значение, а затем проверьте его... или, что еще лучше, используйте обработку исключений, чтобы не заморачиваться с большим количеством операторов if.

2
ответ дан 18 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: