Deklarowanie zmiennych z pojedynczym przypisaniem (const/let, val/var, final)

Deklarowanie zmiennych z pojedynczym przypisaniem (const/let, val/var, final)

Wątek przeniesiony 2022-12-22 17:37 z JavaScript przez Riddle.

MR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 125
0

Załóżmy, że mam taką funkcję:

Kopiuj
function markFieldAsValid(fieldId) {
    let field = document.getElementById(fieldId);
    field.setAttribute("class", "FormValid");
    // do other things with field
}

Co mi da użycie const zamiast let?

ledi12
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
49

Niemutowalność

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
5

Tylko tyle, że jeśli przez pomyłkę zmienisz wartość field to język powie "hola hola".

Drugim aspektem jest wyrażanie intencji. Jak czytam kod, i widzę gdzieś let albo var to myślę: "oho, ktoś chce mutować zmienną, np w while". Jak widzę const albo val to wiem że raz przydzielona wartość już się nie zmieni.

Mało kto również wie że np w JavaScript w pętli też może być const, np:

Kopiuj
for (const value in array) {
  value = 2; // błąd, nadpisanie 
}
SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1023
4

Dobrą praktyką w programowaniu jest używanie tylko tego co potrzebujesz. let daje więcej możliwości niż const więc jeśli możesz użyć const to twój kod jest czytelniejszy i trudniej wprowadzić przypadkowy błąd.

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8488
6
ledi12 napisał(a):

Niemutowalność

const nie ma wpływu na niemutowalność wartości w JS.
Niemutowalne wartości (prymitywy: https://developer.mozilla.org/en-US/docs/Glossary/Primitive ) pozostają niemutowalne, a wszelakie obiekty, tablice itp. pozostają mutowalne.

To, co zapewnia const, to że nie możesz przypisać od nowa zmiennej:

Kopiuj
const foo = {a: 123};

foo.a = 456; // OK
foo = {a: 456}; // błąd: TypeError: Assignment to constant variable.

czyli to, co można nazwać tu stałym/niemutowalnym, to najwyżej binding/referencja (zmienna foo cały czas ma wskazywać na ten sam obiekt lub wartość), ale const nie ma wpływu na mutowalność wewnętrzną (czyli jeśli obiekt się zmieni w środku, to spoko, ma prawo się zmienić, byleby był to ten sam obiekt).

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2
ledi12 napisał(a):

Niemutowalność

Nie do końca, bo po pierwsze możesz osiągnąć niemutowalność bez const/val (np wystawiając tylko gettery z klasy, i nie wystawiając setterów), a po drugie nawet jak użyjesz const to nadal możesz mutować obiekty i tablice.

Więc const nie jest warunkiem koniecznym żeby mieć niemutowalność, i nie jest warunkiem wystarczającym żeby mieć niemutowalność.

const i val to po prostu jednoczesną deklaracja zmiennej, która raz zdefiniowana nie może się zmienić.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.