Показать сообщение отдельно
Старый 10.10.2015, 14:58
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 49  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Сообщение от etc Посмотреть сообщение
Слушай, чем ближе к основам, тем проще. ||= разраб встречает далеко не сразу и значительно реже, чем if (!foo).
Да, твоя позиция понятная и вполне правильная, но у меня другая (тоже правильная). Сейчас объясню.

Я за использование всех возможностей языка, если они не вредят. В чем польза ||= против if? Её банально проще читать, в ней нельзя ошибиться и даже код получается короче.
Код AS3:
if (!foo) foo = new Foo();
Что видит программист? Условие. Он смотрит на условие, он смотрит на отрицание, смотрит на правую часть выражения и сравнивает переменные. Он обязан это сделать читая код. Когда пишешь код – здесь можно ошибиться опечаткой, особенно если язык не требует явного введения переменных.
Код AS3:
if (!polo5) polos = new Polos();
Пример, бесспорно, дурацкий. Суть в том, что внутри if может быть что-то другое и это другое требует проверки программистом при чтении/дебаге.

Оператор ||= же делает только одну из всех возможных функций: инициирует переменную значением, если она ещё не инициирована. Больше она ничего делать не может. Здесь нельзя опечататься в условии или как-то напортачить, здесь короткая запись, здесь нет повторения имени переменной – а это DRY, это хорошо.

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