Третий день вязов — Рекорды


Записи

Согласно Ричарду Фельдману,

Записи — это обычные, неизменяемые данные.

Синтаксически они похожи на объекты Javascript, но не совсем такие же. У них нет prototype и this, например. О чем я действительно хочу поговорить, так это об обновлении записей.

Обновление записи просто относится к тому, как мы изменяем свойства записи в Elm. Термин «изменять» здесь является своего рода ошибкой. Обновление записи не изменяет старую запись, вместо этого создаются новые записи на основе старой. Например, у нас есть такой фрагмент кода Elm:

record = { a = 1, b = 2 }

newRecord = { record | a = 5 }

Войти в полноэкранный режим Выйти из полноэкранного режима

Приведенный выше код не изменяет record. Это очень похоже на оператор . для мутации объектов в Javascript, но это не то же самое. Это гораздо ближе к spreading record в newRecord и обновлению нужных вам полей. В Javascript я думаю о таком поведении примерно так:

const record = Object.freeze({ a: 1, b: 2 });
const newRecord = Object.freeze({ ...record, a: 5 });

Войти в полноэкранный режим Выход из полноэкранного режима

Мы используем здесь Object.freeze, потому что нам нужно, чтобы объекты, возвращаемые в обоих случаях, были неизменяемыми. Вы видите, что в обоих случаях мутация не происходит. Это хорошо, потому что избавляет нас от многих проблем с побочными эффектами, возникающими при передаче значений по ссылке.

Это очень интересно!

Оцените статью
devanswers.ru
Добавить комментарий