Я изучаю JavaScript уже две недели. Я бы сказал, что это ужасный язык для изучения, но замечательный в использовании. У него некрасивый синтаксис и абсурдное отношение к ошибкам .js. Однако чем больше я узнаю, тем больше красоты вижу. Например, меня очень обрадовали трюки с деструктуризацией. Чтобы охватить их, я воспользуюсь примером упражнения, которое наш тренер по разработке программного обеспечения, Джейн Коста, подготовила для нас, чтобы мы могли освоиться с языком (полный код здесь):

Изначально (часть) мой код выглядел следующим образом:

В этом фрагменте кода вы можете увидеть две огромные функции. Первый - toggleShow () (строки 1–18), отвечающий за отображение / скрытие карточки животного, содержащий eventListener, который передает аргумент объекта (животного) в editAnimal () (строки 20–40). Они очень красиво выглядят? Неа. Они не СУХИЕ.

Начните деструктуризацию.

Что, если бы я сказал вам, что есть способ лучше? На самом деле есть. JavaScript позволяет нам делать такие трюки:

Или в виде кода:

Короче говоря, то, что раньше занимало 5 строк кода, теперь может быть выражено в одной. Также обратите внимание, что я вызываю только ключи во вновь созданной форме. Как видите, я взял деструктурированный объект Animal в его ключи (вверху, строка 5).

Ключи могут быть расположены в случайном порядке, поскольку объекты (в отличие от массивов) представляют собой неупорядоченные коллекции практически на любом языке (хэши в Ruby, словари в Python). Вы также можете опустить некоторые нерелевантные ключи, потому что это не похоже на заботу о JavaScript.

Сделаем еще один шаг. Как насчет этого:

Или во фрагменте кода:

Как видите (строка 1), я заменил предыдущий аргумент «животное» его деструктурированной версией. Я также избавился от переменной, потому что теперь она нам больше не нужна. Теперь внутри этой функции я могу вызывать только ключи без объекта, которому они принадлежат.

А что будет, если мы имеем дело с вложенным объектом? Допустим, у нашей бабочки три разных хобби, каждое из которых имеет свои категории:

{
  "animals": [
    {      
      "name": "Doctor Pete",
      "species": "Butterfly",
      "ferociousness": "1",
      "hobby": {
                "main": "bagels",
                "weird": "singing",
                "mundane": "flying around joyfully"
               },
      "image": "https://ichef.bbci.co.uk/news/660/cpsprodpb/68BE/production/_84441862_84feb9aa-fb40-4be7-86c7-03051264c9fb.jpg",

      "id": 21
    }
  ]
}

Скажем, мы хотим просто показать два из трех хобби. Мы бы сделали это так:

let ({name, hobby: {main, weird}, image, species, ferociousness}) = animal

А что, если мы действительно хотим, чтобы обычное хобби было по умолчанию?

let ({name, hobby: {main, weird, mundane = "enjoying sunsets"}, image, species, ferociousness}) = animal

Еще один удобный пример работы с DOM - формы. Мой исходный код выглядел так:

Ничего страшного, это работает, но много повторений. Начнем с тела нашего запроса (строки 12–17). Знаете ли вы, что если вы назовете свои константы так же, как ключи, вы можете позволить себе немного лениться? Смотри сюда:

Или во фрагменте кода (строка 12):

Это лучше, но я полагаю, что мы могли бы использовать значения из форм как минимум в двух функциях. Как насчет того, чтобы извлечь вводимые пользователем данные во вспомогательную функцию?

Или во фрагменте кода:

Как видите, теперь все вводимые пользователем данные (строки 3–7) из обеих форм будут доступны глобально путем вызова функции (строки 12 и 16). И, наконец, эту одну длинную функцию можно разделить на три меньших: updateFrontEnd (), updateBackEnd () и update ().