Wszystko o klamrach w JS

W kodzie znajdziemy bardzo dużo różnych znaków, które pozwalają nam na rozróżnianie poszczególnych jego elementów. Na szczególną według mnie uwagę zasługują nawiasy klamrowe, pełniące różnorakie funkcje w kodzie JS.

Klamerki PAGES.POST.COVER_THUMBNAIL.BY_WHOM tolgart

Z tego artykułu dowiesz się:

  • W jakim języku po raz pierwszy użyto nawiasów klamrowych?

  • W jaki sposób można tworzyć obiekty w JS?

  • Co to jest blok kodu?

  • Czym są i jak działają etykiety w Javascript?

  • Jak działa destrukturyzacja obiektów w JS?

Naukę języka obcego zazwyczaj zaczynamy od poznania podstawowego słownictwa. Wraz ze wzrostem naszego poziomu zaawansowania staramy się dotykać coraz bardziej złożonych jego aspektów, wyjątków i dziwactw - czyli jego gramatyki.

Języki programowania również mają swoją gramatykę, którą jest nic innego jak poprawność składniowa tworzonego kodu. Z czego zatem składa się kod? W zasadzie odpowiedź jest bardzo prosta - z wyrażeń i instrukcji. Wyrażenia w kodzie są odpowiednikami zdań. Zaryzykuję stwierdzenie, że pisanie programu jest niczym pisanie opowieści. Im lepsze zdania, tym ciekawsza historia.

W językach naturalnych, aby osiągnąć zamierzony efekt, wykorzystujemy interpunkcję, zabiegi językowe, tak jak metafory i parafrazy, dzielimy opowieść na paragrafy i rozdziały. W kodzie znajdziemy dużo analogii - klasy, obiekty jako rozdziały, bloki jako akapity, średniki i nawiasy jako znaki interpunkcyjne.

Mógłbym pewnie dość dużo napisać na temat samej składni w ogólnikach, ale dziś chciałbym się skupić na jednym rodzaju znaków wykorzystywanych w kodzie Javascript a mianowicie na nawiasach klamrowych.

Słynne klamerki

Nie byłbym sobą, gdybym nie zaczął tej historii od początku - czyli od lat 60. XX wieku. Do lat 60. kod zapisywano tylko z wykorzystaniem dwóch rodzajów nawiasów: okrągłe () oraz kwadratowe []. Dość szybko stało się to problematyczne, ponieważ programy były się coraz bardziej złożone, a kod stawał się przez to mylący.

Pierwszym językiem do którego wprowadzono nowy znak interpunkcyjny, czyli {}, był BCPL (Basic Combined Programming Language). BCPL został zaprojektowany w 1967 roku przez Martina Richardsa na Uniwersytecie w Cambridge. Język dał podwaliny pod język B, który powstał kilka lat później. Jest to o tyle ciekawe, ponieważ wraz z rozwojem B, na rynku pojawił się język C, z którego Javascript dość mocno czerpał.

Literały obiektu

Klasycznym przykładem wykorzystania nawiasów klamrowych w JS jest literał obiektu. Obiekt w JS możemy stworzyć na kilka sposobów: z wykorzystaniem słowa kluczowego new, z wykorzystaniem wbudowanej metody statycznej Object.create lub za pomocą literału obiektu, czyli {}. Najczęściej spotykanym sposobem tworzenia nowych obiektów będzie właśnie użycie literału. Spójrz na poniższy kod:

Warto zwrócić uwagę na sposób zapisu - w powyższym przykładzie tworzymy nowy obiekt, który będzie zawierał dwie właściwości: name oraz age. Zasada jest prosta: nazwa właściwości, następnie dwukropek, potem wartość przypisana i ostatecznie przecinek, który jest niezbędny, jeśli dodawana właściwość nie jest ostatnią w obiekcie.

Pobranie wartości z takiego obiektu jest bardzo proste. Możemy wykorzystać zapis z kropką, np.:

Obiekty tworzone za pomocą literałów mogą przechowywać dowolne typy danych. Do samego obiektu mamy również dostęp za pomocą wskaźnika this, o ile funkcja dodana do obiektu nie jest arrow function.

Bloki

Użycie nawiasów klamrowych do tworzenia obiektów jest bardzo naturalne w języku Javascript. Stosowanie pozostałych możliwości jest mniej popularne, co wcale nie znaczy, że są one gorsze. Z nawiasami klamrowymi w JS możemy się spotkać jeszcze w jednym miejscu. Przeanalizujmy poniższe przykłady:

Powyższy przykład pokazuje inne zastosowanie dla nawiasów klamrowych - jako bloki. Czym jest wspomniany blok? Blok kodu to nic innego jak grupa instrukcji, która może następować po dowolnym słowie kluczowym: if, else, for, while itp. Granice bloku wyznaczane są przez nawiasy klamrowe.

Instrukcje znajdujące się w funkcji show znajdują się wewnątrz bloku tej funkcji, podobnie przypisanie wartości do zmiennej result i jej zwrócenie z funkcji - znajdują się w bloku instrukcji warunkowej.

Oba przykłady - zarówno bloku, jak i literału są w miarę intuicyjne i logiczne. Spójrzmy zatem na inny rodzaj bloku:

Najbardziej interesujące nawiasy w powyższym przykładzie to nawiasy klamrowe, które obramowują cały kod. Takie klamry oznaczają, że zamknęliśmy nasz kod w bloku, a nie w obiekcie. Świadczy o tym zastosowana składnia. Zwróćmy uwagę na to, że zapis taki, jak na przykładzie poniżej nie będzie poprawny.

A co się stanie jeśli zapiszemy powyższy przykład troszkę inaczej.

Taki zapis jest poprawny! Ale dlaczego? Odpowiedź jest prosta… etykiety.

Etykiety

Jedną z mało znanych funkcjonalności języka Javascript są tak zwane „etykiety” (ang. labels). Etykiety służą do oznaczania wyrażeń za pomocą identyfikatora. Mogą być przydatne wraz ze słowami kluczowymi break oraz continue, które pozwalają nam na przeskakiwanie pomiędzy instrukcjami, które zostały oznaczone etykietą. W ostatnim przykładzie w bloku stworzyliśmy dwie instrukcje, odpowiednio opisane etykietami a i b.

Dlaczego w bloku b: 1 zwróciło błąd, natomiast b: b = 1 nie? 1 samo w sobie nie jest instrukcją, ponieważ jest wartością, ale już przypisanie wartości 1 do zmiennej b (globalnej w tym wypadku) jest instrukcją.

Składnia etykiety wygląda następująco: <etykieta> <dwukropek> <instrukcja>.

Zatem czas na zadanie dla Ciebie. Jaka wartość wyświetli się w konsoli?

Oczywiście 10. Instrukcja break myLabel; zatrzymała dalsze przetwarzanie bloku i kolejne przypisania wartości nie miały miejsca.

Destrukturyzacja

Innym miejscem, gdzie znajdziemy nawiasy klamrowe będą wyrażenia destrukturyzacji obiektów, zarówno w argumentach funkcji, jak i poza nią.

Zabieg destrukturyzacji pozwala nam na otrzymanie bezpośredniego dostępu do wartości. W przykładzie const { name, age } = obj; tworzone są zmienne name i age, które zawierają odpowiednie wartości z właściwości destrukturyzowanego obiektu. Nazwa właściwości stała się nazwą zmiennej. Natomiast w funkcji whoIs nie mamy do czynienia, wbrew pozorom, z literałem obiektu czy też blokiem kodu. Zabieg jest identyczny jak w sytuacji ze zmiennymi.

Podsumowanie

Nawiasy klamrowe są z nami od końca lat 60. XX wieku. Na stałe zagościły w wysokopoziomowych językach programowania, stając się istotnym elementem ich gramatyki. W JS odpowiadają za wiele mechanizmów, z których najciekawsze to literały obiektów, destrukturyzacje i bloki. Mam nadzieję, że udało mi się dziś rozjaśnić kilka kwestii. Gramatyka z zasady jest trudna (w językach naturalnych to już w ogóle), ale poznając dobrze jej reguły, możemy tworzyć naprawdę wartościowe rzeczy, nie wpadając w dziwne pułapki języków programowania, jak wspomniane dziś etykiety w Javascript.

Udostępnij ten artykuł:

Komentarze (0)

    Jeszcze nikt nic nie napisał, ale to znaczy że... możesz być pierwszy/pierwsza.

Powiązane treści

Jeżeli ten artykuł Cię zainteresował sprawdź inne materiały powiązane z nim tematycznie. Poniżej znajdziesz artykuły i odcinki podcastów mojego autorstwa oraz polecane przeze mnie książki, które rozszerzają ten temat.

Hoisting by Likoper
Artykuł
30 stycznia 2023

Zrozumieć hoisting

Niektóre koncepty Javascriptu wydają się nietypowe, żeby nie powiedzieć dziwne. Dziś chciałbym pochylić się nad jednym z takich mechanizmów a mianowicie hoistingiem.

Czytaj więcej
Editor by Maica
Artykuł
09 lipca 2020

Jak zbudować własny edytor tekstu w przeglądarce?

Praca programisty polega na rozwiązywania problemów. Języki programowania są naszymi narzędziami. Używając nich możemy tworzyć nowe rozwiązania, ale też nowe narzędzia. Zdecydowanie edytory tekstu są takimi narzędziami. Dziś spróbujemy napisać swój własny.

Czytaj więcej

Zapisz się do newslettera

Bądź na bieżąco z nowymi materiałami, ćwiczeniami i ciekawostkami ze świata IT. Dołącz do mnie.