Miniatura artykułu

Specyfikacja ES2024 - 7 najważniejszych nowości

9 minut

Skopiuj link

Data publikacji: 4/1/2024, 5:22:57

Ostatnia aktualizacja: 4/1/2024

Od przełomowego roku 2015 w którym to została wydana specyfikacja ES6 (znana też jako ES2015), otrzymujemy nową specyfikację języka ECMA Script co około 12 miesięcy. To właśnie na tej specyfikacji opiera się współczesny JavaScript.

Co prawda na oficjalne informacje trzeba będzie poczekać do Czerwca, jednak już teraz możemy domyślać się, co się w nich znajdzie.

Proposal

Proposal to wniosek (użycie polskiej nazwy jest rzadkością i zdecydowanie zalecam stosowanie angielskiej), składany przez społeczność, lub pojedynczą osobę, który zawiera pomysł na nową funkcjonalność języka. Zanim jednak zostanie ona dodana, musi przejść przez kilka etapów i zostać zaakceptowana przez organizację ECMA. Pełna lista proposali znajdziesz w oficjalnym repozytorium ECMA.

W dalszej części artykułu będę powoływać się na etapy implementacji, w których znajdują się poszczególne funkcjonalności, dlatego zrozumienie ich znaczenia ułatwi Ci lekturę.

Etap 0 - bardzo wczesna faza. W tym momencie funkcjonalność nie jest jeszcze rozważana przez organizację ECMA. Została jedynie zaproponowana i wymaga jeszcze wielu udoskonaleń i dogłębnego researchu.

Etap 1 - na tym etapie funkcjonalność zostaje wzięta pod uwagę przez ECMA. Wyłoniony zostaje jej opiekun (lub kilku opiekunów), czyli osoba odpowiedzialna za rozwój danej funkcjonalności. Przedyskutować należy między innymi semantykę, a także powód, dla którego funkcjonalność została zgłoszona i sposób jej implementacji.

Etap 2 - w tym momencie organizacja ECMA zdecydowała się już wybrać konkretne rozwiązanie, jednak nie jest to jeszcze finalna wersja i wciąż może ulec znacznym zmianom. Dopiero na tym etapie można się spodziewać, że funkcjonalność zostanie dodana do specyfikacji. Należy jednak pamiętać, że nawet na tym etapie na jaw mogą wyjść nieznane dotąd fakty, które uniemożliwią dalsze prace i tym samym wdrożenie (np. nieprzewidziany problem z kompatybilnością wsteczną)

Etap 2.7 - proposal został zaakceptowany i przechodzi przez proces walidacji. Rozwiązanie również jest gotowe i nie będzie podlegać żadnym gwałtownym zmianom. Dojście do tego etapu oznacza również, że istnieje pełna dokumentacja.

Etap 3 - ECMA rekomenduje daną funkcjonalność do wdrożenia. Nie oznacza to, że pojawi się ona w kolejnej specyfikacji, ponieważ nadal mogą być wprowadzone niezbędne zmiany w przypadku wystąpienia problemów.

Etap 4 - ostatni z etapów. Funkcjonalności, które zaszły aż tutaj będą wdrożone do standardu ECMA Script w kolejnej specyfikacji.

Pełną dokumentację procesu możesz znaleźć tutaj.

Co pojawi się w ES2024?

Proposale znajdujące się na etapie czwartym są niemal pewne, dlatego to właśnie od nich zaczniemy. Skupimy się jednak tylko na tych najważniejszych (gdybym chciał opisać wszystkie, to byłby to bardzo długi artykuł).

Promise.withResolvers

To nowa, statyczna metoda obiektu Promise. Z jej pomocą możemy uzyskać dostęp do funkcji resolve oraz reject poza konstruktorem obiektu Promise.

Co prawda do tej pory również było to możliwe, jednak wymagało nieco więcej kodu i własnego sposobu implementacji. W efekcie wiele bibliotek i projektów wynajdywało koło od nowa, a kod różnił się w każdym z projektów.

Repozytorium: https://github.com/tc39/proposal-promise-with-resolvers

Dokumentacja: https://tc39.es/proposal-promise-with-resolvers/

groupBy

Metoda groupBy jest niezwykle popularna i występuję w niemal każdym języku programowania z wyjątkiem JavaScript. Po wprowadzeniu tej funkcjonalności będziemy mieć dostęp do Object.groupBy oraz Map.groupBy.

Obie metody przyjmują obiekt iterowalny (np. tablicę), a następnie zwracają odpowiednio obiekt i mapę, w których wartości są zgrupowane pod odpowiednimi kluczami.

Repozytorium: https://github.com/tc39/proposal-array-grouping

Dokumentacja: https://tc39.es/proposal-array-grouping/

Flaga -v i set notation

Dodana zostanie nowa flaga -v dla wyrażeń regularnych, a jej użycie, pozwoli na wykorzystanie równolegle wprowadzonej składni, nazwanej jako set notation.

Jednak flaga v nie została wprowadzona jedynie w celu zachowania kompatybilności wstecznej. Poprawia także kilka aspektów związanych z działaniem wyrażeń regularnych.

Repozytorium: https://github.com/tc39/proposal-regexp-v-flag

Dokumentacja:

Top-level await

Nazwa mówi tu sama za siebie - po wdrożeniu tej funkcjonalności będziemy mogli korzystać ze słowa await poza funkcjami oznaczonymi jako async.

Repozytorium: https://github.com/tc39/proposal-top-level-await

Na co jeszcze możemy liczyć?

Funkcjonalności wypisane poniżej znajdują się na etapie trzecim lub drugim, dlatego ich wdrożenie w najnowszej specyfikacji jest nieco mniej prawdopodobne. Podobnie jak wcześniej, omówimy tylko te najważniejsze.

Temporal

Autorzy tego proposala zwrócili uwagę na to, że obiekt Date od dawna jest niewystarczający, a programiści są zmuszeni do używania zewnętrznych bibliotek, takich jak moment.js lub date-fns. Potwierdzają to także wyniki ankiety State of JS 2022 - na trzecim miejscu widnieje lepszy sposób pracy z datami.

Nowy obiekt Temporal będzie zawierać wiele metod, które znacznie ułatwią pracę z datami w JavaScript. Jeżeli już teraz chcesz zapoznać się z jego możliwościami, to koniecznie zajrzyj do dokumentacji (link znajdziesz poniżej).

Repozytorium: https://github.com/tc39/proposal-temporal

Dokumentacja: https://tc39.es/proposal-temporal/docs/index.html

Pipeline operator

W ankiecie State of JS 2020 wielu programistów wskazało, że to właśnie pipeline operator jest funkcjonalnością, którą chcieliby zobaczyć w JavaScript.

Zaproponowana składnia wygląda następująco: |> i rozwiązuje problem głębokiego zagnieżdżania kolejnych wywołań funkcji, które jako argument przyjmują wynik działania innej funkcji.

Repozytorium: https://github.com/tc39/proposal-pipeline-operator

Dokumentacja: https://tc39.es/proposal-pipeline-operator/

Decorators

Dla użytkowników TypeScriptu dekoratory z pewnością nie są tematem zupełnie obcym. Znajdziemy je również w wielu innych językach programowania (np. Python).

Dektoratory to funkcje, które są wywoływane np. na klasach i ich elementach (metody, właściwości) w momencie ich definiowania. Używamy do tego @. Autorzy postanowili nie dodawać specjalnej składni do tworzenie dekratorów. Oznacza to, że każda funkcja może zostać użyta jako dekorator.

Ich głównym celem jest dodanie funkcjonalności do wybranej wartości i zmodyfikowanie jej zachowania w czasie działania aplikacji.

Więcej na temat wzorca dekoratora możesz znaleźć tutaj.

Repozytorium: https://github.com/tc39/proposal-decorators

Podsumowanie

Pamiętaj, że omówiłem tu jedynie najważniejsze (moim zdaniem) zmiany. Jeżeli chcesz zapoznać się z pełną listą, to możesz ją znaleźć pod tym linkiem, a jeżeli już teraz chciałbyś lub chciałabyś sprawdzić nowe możliwości w praktyce, to możesz to zrobić wykorzystując Babel.js.

Alternatywą może być konsola w przeglądarce, ponieważ wiele z nich (w tym Google Chrome) implementuje nowe rozwiązania, zanim pojawią się w oficjalnej specyfikacji ECMA Script, a nierzadko, zanim w ogóle dojdą do etapu czwartego.

Avatar: Wojciech Rygorowicz

Software Engineer / Fullstack developer

Wojciech Rygorowicz

wojciech.rygorowicz@gmail.com

Podziel się na

Dodaj komentarz

Komentarze (0)

Brak komentarzy