🔥

Тред (@aminopyridin)


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

Использование логических операторов в качестве ветвления (как на картинке). Если с тем, что HTML можно писать в файле JS несложно смириться (хотя все еще больно некоторым), то с использованием && в качестве if уже тяжело.
notion image

Дело в том, что здесь задействуются сразу три неочевидные вещи: - короткий цикл вычислений логических операторов: он во многих языках такой, но мало кто о нем помнит, потому что редко сайдэффекты в логических конструкцияз применяют

- использование логического выражения вне «логического контекста» — тут нет конструкции if или for, в которых привычно встречать такие выражения - знание о том, что логический оператор возвращает значения в исходном формате, а не приведенным к булевому виду.

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

Но в JS логические операторы ведут себя странно — значение приводят, делают выводы, а возвращают значение в неприведенном виде. Возможно вы сами, используя эти конструкции, не задумываетесь, какие неочевидные вещи пишете.

Кстати, добить аудиторию можно вопросом к коду с картинки выше, «что будет, если забыть написать > 0, а массив будет пустой?» После этого выясняется еще одно скрытое знание в использовании этой конструкции: реакт не отображает false, null и undefined.

Асинхронность в JS. Когда я рассказываю, например, что setState — асинхронный метод, а значит, строчкой ниже еще точно изменений не применились, люди воспитанные многопоточными языками, спрашивают «откуда мы можем быть уверены? А вдруг успел сработать асинхронный код?»
notion image

Debounce and Throttling. Есть один учебный блок, в котором помимо прочего я рассказываю о хороших манерах при работе с асинхронностью в интерфейсах. Там про оптимистичный рендеринг, сообщения об ошибках и два волшебных слова дебоунс и тротлинг.

Опрос перед тем, как продолжать: знаешь ли ты такие термины, как debounce и throttling?
🤔 73.2% Знаю оба
🤔 10.5% Знаю debounce
🤔 4.6% Знаю throttling
🤔 11.8% Не знаю оба

Стандартно, фронтендеры чаще знают про debounce, а бэкендеры — про throttling. Причем бэкендеры, говоря про тротлинг, говорят про процессоры; фронтендеры про тротлинг обычно вспоминают про выпадашку в DevTools. Дебоунс фронтендеры обычно в связи с полями поиска вспоминают.

HTML+CSS — язык программирования?! У многих разработчиков есть некоторое пренебрежение к верстке и периодически на моих занятиях встречаются шутники с остроумными шутками про HTML-программистов.

Тогда я этим шутникам рассказываю, что после выхода HTML5 и CSS3 связка из HTML+CSS стала Тьюринг-полным языком программирования (lemire.me/blog/2011/03/0…). Так что «вы просто не умеете программировать на этом языке»

Если вы сами пришли в мир JS после других языков, расскажите, что вам кажется или казалось странным/непривычным/неудобным в JS или TS?