Главная » Статьи » Замена let на const

Замена let на const

От автора: использование const в JavaScript дает несколько преимуществ. В статье мы поговорим об использовании let и const в JavaScript.

Начнем с преимуществ const перед let:

Это позволяет команде, проверяющей ваш код, быть уверенным что значение переменной не будет изменено.

Будет вызвана ошибка, если вы пытаетесь изменить эту переменную, предотвращая случайное повторное присвоение.

Оптимизирует виртуальную машину для использования неизменных значений.

Позволяет избежать побочных эффектов, вызванных конфликтами в значениях переменных.

Больше соответствует функциональному программированию и неизменяемым состояниям.

Является хорошей практикой использования TypeScript.

Обычная практика — использовать const по умолчанию, обозначая, что переменная постоянна и неизменна. Однако это может сбивать с толку, если вам нужна постоянная переменная, которая определена условно, но в остальном неизменна. Приведу пример:

let height = 60;
if (name === 'Charles') { height = 70;
} else if ( gender === Gender.Male && race === Race.White
) { height = 69;
} else if (gender === Gender.Female) { height = 64;
}

В приведенном выше примере я условно определил переменную с типом let, что позволяет мне немедленно переназначить ее значение. Значение переменной не изменится в будущем, и мне хотелось бы определить ее как константу, чтобы показать, что я не хочу, чтобы будущий код когда-либо изменял его.

Всегда есть несколько способов решить проблему. В этом случае вы можете использовать определение height как const, но в некоторых случаях это может быть не лучшим (или возможным) решением. Я хочу предложить решение, которое применимо для всех видов использования let.

Это решение может быть не самым оптимальным, но оно применимо к каждому варианту использования и может быть расширено для любого рефакторинга. Вы можете использовать этот шаблон, чтобы заменить свой let на const. Наше решение — использование функций.

function getHeight({ gender, name, race }) { if (name === 'Charles') { return 70; } if ( gender === Gender.Male && race === Race.White ) { return 69; } if (gender === Gender.Female) { return 64; } return 60;
}
const height = getHeight({ gender, name, race });

В этом примере каждое условное выражение (name === ‘Value’) возвращает значение для переменной height. Использование операторов возврата return позволяет множеству значений существовать в одной области функции без использования временных переменных (let). Я использую этот паттерн все время, и мне он нравится.

Код длиннее? Да. Это более читабельно? Да. Его проще поддерживать? Да. Менее подвержен ошибкам пользователя? Да. Модульное тестирование проще? Да.

expect(getHeight({ name: 'Charles' })).toBe(70);
expect(getHeight({ gender: Gender.Male, race: Race.White,
})).toBe(69);
expect(getHeight({ gender: Gender.Female })).toBe(64);
expect(getHeight({ gender: Gender.Male })).toBe(60);

Если вы используете let чтобы назначать значеие переменной на основе условных выражений ( if (…) { myVar = …; }), подумайте об использовании функции для проверки условий и возврата присвоения ( function abc() { if (…) { return …; } }).

Удачного кодирования!

Автор: Charles Stover

Источник: charles-stover.medium.com

Редакция: Команда webformyself.

Читайте нас в Telegram, VK, Яндекс.Дзен