Деструктуризация: извлечение аргументов функции

Деструктуризация: извлечение аргументов функции

Наши соц. сети: instagram, fb, tg

Деструктуризация ES6 - это чудеснейший инструмент для извлечения значений аргументов. Поэтому в следующий раз, когда вы надумаете присваивать аргументы поочередно, через обращение к каждому из них - смело выбросьте это из головы и используйте деструктуризацию. 🎉

function omelette(...args) {
  // ❌
  // const egg = args[0];
  // const cheese = args[1];
  // ✅
 const [egg, cheese] = args;
}
omelette('🥚', '🧀');

Синтаксис

Первое,что нам нужно сделать - это собрать все наши аргументы в один массив.

// Шаг 1:
(...args)
args // [ '🥚', '🧀' ]

Затем мы присваиваем их нашим переменным, используя деструктуризацию массива.

// Шаг 2:
const [egg, cheese] = args;
egg; // '🥚'
cheese; // '🧀'

Остаточные параметры (rest parameters)

Синтаксис rest parameters позволяет нам представлять неопределенное количество аргументов в виде массива. Остаточные параметры собирают отдельные аргументы, которые мы передаем в функцию и возвращает массив

Благодаря такому синтаксису, нам не нужно называть аргументы сразу - перезаписать их можно в любой момент!

Старайтесь избегать объекта arguments, а вместо него использовать остаточные параметры. Это нововведение в ES6 поможет облегчить вам доступ к ним и упростить работу с неопределенным числом аргументов 👏

Несколько важных рекомендаций

Существует несколько рекомендаций по использованию аргументов функций, которые указаны в руководстве по стилю JavaScript в AirBnb: Никогда не используйте arguments, вместо этого используйте синтаксис осточных параметров ... Почему? ... явно говорит о том, какие именно аргументы вы хотите извлечь. Кроме того, такой синтаксис создаёт настоящий массив, а не массивоподобный объект как arguments.

// плохо
function concatenateAll() {
 const args = Array.prototype.slice.call(arguments);
 return args.join('');
}
// хорошо
function concatenateAll(...args) {
 return args.join('');
}

Используйте синтаксис записи аргументов по умолчанию, а не изменяйте аргументы функции.

// очень плохо
function handleThings(opts) {
 // Нет! Мы не должны изменять аргументы функции.
 // Плохо вдвойне: если переменная opts будет ложной,
 // то ей присвоится пустой объект, а не то что вы хотели.
 // Это приведёт к коварным ошибкам.
 opts = opts || {};
 // ...
}
 
// всё ещё плохо
function handleThings(opts) {
 if (opts === void 0) {
   opts = {};
 }
 // ...
}
 
// хорошо
function handleThings(opts = {}) {
 // ...
}

Приятного кодинга!