Комментарии 20
А не подскажите какой плагин для VSCode "понимает" Nullish? А то JS-CSS-HTML Formatter js-beautify нагло вносит кашу и ломает код. Ну или как его настроить...
Соглашусь. Но, кмк, в рамках статьи про одну из фичей es6 это бы добавило вопросов к примеру, поэтому в таком контексте я все-таки согласен с примером оригинала.
IMHO, || и ?? таки для разных целей. ?? может вернуть 0 или пустую строку, в отличии от. Так как || проверяет на истинность, а ?? на присвоение значение(всё, что не null || undefined).
Это называется "деконструкция"
Говорят и так и так, но правильнее деструктуризация, даже гугл с вами не согласится)
https://www.google.com/search?q=деконструкция+объекта&sxsrf=APq-WBuBqd6rRjMxREJjsu_vrl53sdXwcA%3A1648569589881&ei=9SxDYummNd2n9u8P_5KVuAo&ved=0ahUKEwip9aqm2Ov2AhXdk_0HHX9JBacQ4dUDCA4&uact=5&oq=деконструкция+объекта&gs_lcp=Cgdnd3Mtd2l6EAMyBAgAEEcyBAgAEEcyBAgAEEcyBAgAEEcyBAgAEEcyBAgAEEcyBAgAEEcyBAgAEEc6BwgjELADECc6BwgAEEcQsANKBAhBGABKBAhGGABQxAxYxAxgvxxoAnACeACAAQCIAQCSAQCYAQCgAQHIAQjAAQE&sclient=gws-wiz
В чём Вы видите несогласие? Термин "деструктуризация" упомянут в двух учебниках по JS. В большинстве случаев употребляется термин деконструкция.
Речь идёт не о процессе лишения чего-то структуры (например, деструктуризация власти; сравните с реструктуризацией), а о процессе, обратном конструированию (например, деконструкция моста; сравните с реконструкцией). В теории языков программирования те процедуры, которые разбирают данные на части называют деконструкторами, в противоположность конструкторам (термин "деструктор" уже был занят). На английском, ведь, то же самое:
https://duckduckgo.com/?q=destructure+tuple
https://duckduckgo.com/?q=deconstruct+tuple
В JS речь идёт конкретно о destructuring assignment - о присваивании, забывающем структуру, но сам процесс разбора объекта на отдельные составляющие - это, всё же, деконструкция.
Во-первых, я бы не назвал ES6 "новым".
Во-вторых, слепое деструктурирование всего и вся очень быстро может привести к стрельбе себе в ногу, т.к., если уж взялись деструктурировать, всегда следует точно понимать, где вам необходима передача by reference, а где достаточно копирования by value.
В-третьих, также не забываем, если вы собираетесь использовать деструктурирование, особенно вместе с инициализаторами и spread, это не бесплатные операции. Без понимания этого люди пишут эпически тормозной код.
В ином случае они бы писали бы эпически нечитабельный код. Так что из двух зол меньшее.
Уже 7 лет как es6 вышел как официальный стандарт, 8 лет как лично я осознанно использовал его бетта-фичи, 9 лет как хром его частично реализовал, но ради кармы и, видимо, денег всё пишут и пишут о “новом синтаксесе es6”.
А что именно в деструктурировании тормозное?
const {name} = object
const name2 = object.name
у этих двух вызовов будет разница в скорости?
Нет, в таком случае никакой разницы в скорости не будет. А вот с rest-ом для длинных массивов я был бы более осторожен, т.к. это, как минимум, slice, т.е. копирование части массива в памяти. Если мы говорим не только о деструктурировании, но и о spread, который часто используют с ним в паре, то мне приходит в голову вот такой антипаттерн:
Пожалуйста, не делайте так
[1,2,3,4,5].reduce((acc, value, index) => ({...acc, [value]: index}), {});
Понял. Все же дополнительные операции не в деструктуризации как таковой, а именно в rest. Но если кто-то делает rest с деструктуризацией, то предполагается, что ему таки нужно это значение.
Кстати, ваш антипаттерн - он про spread syntax, тут вообще нет деструктуризации.
С одной стороны как-то сложно и запутанно, и автор сам это отмечает. С другой стороны - подобные фичи в том или ином объеме представлены в других языках, например, Perl и его последователях.
У автора мелкая ошибка в подглаве "Базовая деструктуризация массива".
console.log(secondFruit); // Orange
console.log(secondFruit); // Apple (да, мы можем позволить себе и третий фрукт, потому что мы молодцы)
так как можем добавить в резюме что-то про DRY.
По-моему DRY немного не про это..
Кстати, а можно смаппить из объекта только свойства, имеющиеся в записывемом? Типа
let obj = {name: "Tmfs"}
let source = {name: "John",
age:25};
obj = ... // копируем только name
Пишем чистый код при помощи деструктуризации объектов в JavaScript