Записи
Согласно Ричарду Фельдману,
Записи — это обычные, неизменяемые данные.
Синтаксически они похожи на объекты 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
, потому что нам нужно, чтобы объекты, возвращаемые в обоих случаях, были неизменяемыми. Вы видите, что в обоих случаях мутация не происходит. Это хорошо, потому что избавляет нас от многих проблем с побочными эффектами, возникающими при передаче значений по ссылке.
Это очень интересно!