W Parku Jurajskim istnieją protokoły bezpieczeństwa, które muszą być bezwzględnie przestrzegane, ale są też takie, które czasem można elastycznie interpretować w zależności od sytuacji. Podobna sytuacja występuje w JavaScript z semicolonami (średnikami) - czasem są absolutnie konieczne, a innym razem kompletnie opcjonalne.
Semicolony (
;) służą do oddzielania instrukcji w JavaScript. To jak bramy bezpieczeństwa między poszczególnymi procedurami w Parku Jurajskim - wyraźnie zaznaczają, gdzie kończy się jedna operacja, a zaczyna kolejna.1let velociraptorCount = 3; // Pierwsza instrukcja
2velociraptorCount = velociraptorCount + 2; // Druga instrukcja
3console.log("Liczba velociraptorów: " + velociraptorCount); // Trzecia instrukcjaJavaScript posiada mechanizm nazywany "Automatic Semicolon Insertion" (ASI), czyli automatyczne wstawianie średników. Mechanizm ten pozwala na pomijanie średników w wielu przypadkach, gdyż JavaScript inteligentnie domyśla się, gdzie powinny się znajdować.
To jak sytuacja w Parku Jurajskim, gdy doświadczeni treserzy dinozaurów mogą czasem pominąć niektóre kroki procedury, bo wiedzą, jak się bezpiecznie zachować.
1// Kod bez średników - ASI wstawi je automatycznie
2let trexWeight = 8000
3console.log("Waga T-Rexa: " + trexWeight)W powyższym przykładzie JavaScript interpretuje kod tak, jakby wyglądał następująco:
1let trexWeight = 8000;
2console.log("Waga T-Rexa: " + trexWeight);ASI (Automatic Semicolon Insertion) działa według kilku zasad, które warto rozumieć.
JavaScript wstawia średnik automatycznie, gdy napotka znak nowej linii (newline), jeśli uważa, że instrukcja powinna się w tym miejscu zakończyć:
1let dinoName = "Velociraptor" // ASI wstawi średnik tutaj
2let dinoHeight = 0.5 // ASI wstawi średnik tutajJavaScript wstawia średnik przed nawiasem klamrowym zamykającym blok kodu:
1function checkDinosaur() {
2 return // ASI wstawi średnik tutaj
3 {
4 species: "T-Rex",
5 dangerous: true
6 }
7}Uwaga! W powyższym przykładzie ASI spowoduje, że funkcja zwróci
undefined, a nie obiekt, jak można by oczekiwać. Aby uniknąć takich nieoczekiwanych rezultatów, należałoby napisać:1function checkDinosaur() {
2 return {
3 species: "T-Rex",
4 dangerous: true
5 };
6}Jeśli linia kończy się operatorem (np.
+, -, *), JavaScript zakłada, że instrukcja jest kontynuowana w następnej linii:1let longMessage = "Dinozaury w Parku Jurajskim " +
2 "są stale monitorowane" // ASI nie wstawi średnika po pierwszej liniiPodobnie jak nieprzestrzeganie procedur w Parku Jurajskim może prowadzić do nieszczęśliwych wypadków, tak poleganie wyłącznie na ASI może powodować nieoczekiwane błędy. Oto kilka sytuacji, w których ASI może działać inaczej, niż byśmy oczekiwali:
1let a = 5
2(function() {
3 console.log("Ta funkcja zostanie wywołana natychmiast!")
4})()JavaScript zinterpretuje to jako:
1let a = 5(function() {
2 console.log("Ta funkcja zostanie wywołana natychmiast!")
3})();Co spowoduje błąd, ponieważ
5 nie jest funkcją. Prawidłowy zapis to:1let a = 5;
2(function() {
3 console.log("Ta funkcja zostanie wywołana natychmiast!")
4})();[ lub +1let dinosaurs = ['T-Rex', 'Velociraptor']
2['Triceratops', 'Brachiosaurus'].forEach(function(dino) {
3 console.log(dino)
4})JavaScript może zinterpretować to jako próbę dostępu do tablicy
dinosaurs z użyciem indeksu ['Triceratops', 'Brachiosaurus'], co spowoduje błąd. Prawidłowy zapis:1let dinosaurs = ['T-Rex', 'Velociraptor'];
2['Triceratops', 'Brachiosaurus'].forEach(function(dino) {
3 console.log(dino)
4});W świecie JavaScript istnieją dwie szkoły myślenia na temat semicolonów, podobnie jak w Parku Jurajskim są różne podejścia do zarządzania dinozaurami:
To jak przestrzeganie wszystkich procedur bezpieczeństwa w parku, nawet jeśli niektóre wydają się nadmiarowe:
1// Kod ze średnikami
2let parkStatus = "Otwarte";
3let visitorCount = 1500;
4
5function updateStatus(newStatus) {
6 parkStatus = newStatus;
7 return parkStatus;
8}
9
10updateStatus("Zamknięte ze względów bezpieczeństwa");
11console.log("Aktualny status: " + parkStatus);To jak pozwalanie doświadczonym trenerom na pewną swobodę w pracy z dinozaurami:
1// Kod bez średników
2let parkStatus = "Otwarte"
3let visitorCount = 1500
4
5function updateStatus(newStatus) {
6 parkStatus = newStatus
7 return parkStatus
8}
9
10updateStatus("Zamknięte ze względów bezpieczeństwa")
11console.log("Aktualny status: " + parkStatus)Jeśli zdecydujesz się na pomijanie semicolonów, oto kilka zasad bezpieczeństwa (jak protokoły bezpieczeństwa w Parku Jurajskim):
(, [ lub / (to znaki niebezpieczne dla ASI):1// ŹLE - potencjalna pułapka:
2let greeting = "Witaj w Parku Jurajskim"
3(function() {
4 console.log(greeting)
5})()
6
7// DOBRZE - dodaj średnik przed IIFE:
8let greeting = "Witaj w Parku Jurajskim";
9(function() {
10 console.log(greeting)
11})()
12
13// LUB - użyj operatora unary plus:
14let greeting = "Witaj w Parku Jurajskim"
15;(function() {
16 console.log(greeting)
17})()return, break, continue, throw na końcu linii:1// ŹLE - ASI wstawi średnik po return:
2function getDinosaurData() {
3 return
4 {
5 name: "T-Rex",
6 weight: 8000
7 }
8}
9
10// DOBRZE - nawias klamrowy w tej samej linii co return:
11function getDinosaurData() {
12 return {
13 name: "T-Rex",
14 weight: 8000
15 }
16}Jak w zarządzaniu parkiem - albo wszystkie procedury są przestrzegane, albo żadna. Mieszanie stylów prowadzi do chaosu i błędów.
Podobnie jak w Parku Jurajskim używa się zaawansowanych narzędzi do monitorowania dinozaurów, tak w JavaScript mamy narzędzia pomagające w zarządzaniu kodem:
1// W pliku .eslintrc.json:
2{
3 "rules": {
4 "semi": ["error", "always"] // lub "never" dla stylu bez średników
5 }
6}1// W pliku .prettierrc:
2{
3 "semi": true // lub false dla stylu bez średników
4}Wybór między używaniem a pomijaniem semicolonów w JavaScript przypomina decyzję o stylu zarządzania w Parku Jurajskim - bardziej formalne przestrzeganie procedur czy elastyczne podejście oparte na doświadczeniu.
W profesjonalnym kodzie JavaScript najważniejsza jest konsekwencja - albo wszędzie używasz semicolonów, albo nigdzie. Mieszanie stylów prowadzi do chaosu i błędów, podobnie jak niekonsekwentne przestrzeganie protokołów bezpieczeństwa w parku pełnym dinozaurów prowadziłoby do katastrofy.
Ostatecznie, jak powiedział dr. Ian Malcolm w Parku Jurajskim: "Twoi programiści byli tak zajęci myśleniem, czy mogą pominąć semicolony, że nie zastanowili się, czy powinni."
W następnej lekcji przyjrzymy się deklaracji zmiennych w JavaScript, gdzie poznamy
var, let i const - różne sposoby oznaczania i zabezpieczania naszych danych, podobnie jak różne poziomy zabezpieczeń dla różnych gatunków dinozaurów w Parku Jurajskim.