Преимущество const vs let в TypeScript (или Javascript)
я читал TypeScript Глубокое Погружение и я вижу, что оба let
и const
это блок, который является большим. Очевидно, что константа не может быть изменена (она неизменна). Но почему ReSharper поощряет меня менять столько let
s до const
Как я могу? Я предполагаю, что ReSharper думает, что есть прирост производительности при использовании const
над let
? Есть ли разница в скорости между const
и let
? Есть ли другая причина использовать const
? Взять следующий пример:
for (let i = 0; i < this.InputControl.ParentQuestions.length; i++) {
const id = this.InputControl.ParentQuestions[i].ParentId;
const value = this.InputControl.ParentQuestions[i].ParentRequiredAnswer;
if (!formVals[id]) return false;
if (formVals[id].toLowerCase() != value.toLowerCase()) return false;
}
раньше у меня был let id
и let value
но Решарпер попросил меня изменить их на const
, который работает, но почему лучше в этом случае? Или в любом случае?
я нашел этот вопрос на SO, но он больше говорит о том, что let
и const
do, не так много, почему один лучше, чем другой. Он говорит использовать const
как можно больше, но какую пользу это дает?
2 ответов
Я согласен с Георгий эта производительность не является основной причиной. Анализатор кода может также определить, что переменная объявлена с let
никогда не переназначается и оптимизирует его так же, как если бы вы объявили его с const
. (Черт, у линтеров есть правила, чтобы обнаружить это и предложить использовать const
вместо let
.)
Да, это сигнализирует читателю, что вы не собираетесь назначать переменной. Преимущество const
, за ввод комментарий говоря то же самое, в основном, что const
является стандартным способом сигнализации. Будучи стандартным, он передает информацию более легко, чем пользовательские комментарии. (Кроме того, комментарий может быть неправильным, но const
не позволит вам ошибаться. Не думаю, что это главное преимущество.
"принцип наименьших привилегий" часто используется в сочетании с const
, но почему я должен заботиться о наименьших привилегий? Потому что оно помогает с ранним обнаружением кодирвоания ошибки. Рассмотрим следующий код:
function findSomethingInDocument(document) {
let tree = getTreeFromDocument(document); // We get some sort of tree structure.
let found;
for (const child of tree.children) {
if (child.someFlag) {
tree = child; // Oops I meant found = child :(
break;
}
}
return found;
}
в этом коде, я набрал tree = child
когда я хотел типа found = child
. Да, жук can находятся в тестировании. Но зачем ждать тестирования? Я никогда не имел в виду tree
надо менять. Если бы я пометил его!--2--> Я бы сразу узнал об ошибке потому что компилятор сообщил бы мне об этом. Мне не придется ждать тестирования. Код выше довольно прост, но представьте себе больше сложный алгоритм, использующий больше переменных.
IMO я не думаю, что это связано с причинами производительности, но это может быть связано с документацией.
когда у вас есть переменная, которая может быть объявлен const
, и вы объявляете его таковым вы сообщить читатель, что вы не собираетесь переназначать его на другое значение позже.
также это может быть связано с чем-то вроде принципа наименьших привилегий, когда вы объявите переменную как const
, вы защищаете себя от случайная модификация его позже.