Łańcuchy szablonowe (Template strings)
Łańcuchy znaków pozwalają na łatwe interpolowanie wartości zmiennych i wyrażeń wewnątrz łańcucha znaków oraz tworzenie wielowierszowych ciągów znaków bez konieczności używania specjalnych znaków nowej linii.
JavaScript
Nauka
19 marca 2023
Łańcuchy szablonowe
Razem z wejściem nowego standardu ES wprowadzony został nowy rodzaj literałów łańcuchowych — łańcuchy szablonowe. W odróżnieniu od zwykłych łańcuchów do ich zapisu zamiast 'apostrofów` bądź "cudzysłowów" korzystamy z `grawisów`, po angielsku nazywanymi backticks.
Aby zobaczyć, z czym mamy do czynienia, posłużmy się przykładem.
Zwykły łańcuch znaków
const name = 'Szymon';const age = 29;const greeting = 'Cześć, nazywam się ' + name + ' i mam ' + age + ' lat.';console.log(greeting);// Cześć, nazywam się Szymon i mam 29lat.
W zwykłym łańcuchu znaków, aby dodać wartość zmiennych do łańcucha, trzeba użyć operatora konkatenacji ( + ), który łączy ciągi znaków i zmienne. W przykładzie użyliśmy trzech zmiennych name, age oraz łańcucha znaków 'Cześć, nazywam się ' i ' i mam ' oraz ' lat.'.
Szablon literału
const name = 'Szymon'const age = 29const greetingTemplate = `Cześć, nazywam się ${name} i mam ${age} lat.`;console.log(greetingTemplate);// Cześć, nazywam się Szymon i mam 29 lat.
Jak widać, przykład użycia template strings jest dużo czytelniejszy. Zamiast operatora ( + ) używamy tutaj zapisu `${nazwa_zmiennej}`, co pozwala na wprowadzenie zmiennej bez konieczności wstawiania jej wprost do ciągu znaków.
Wieloliniowe łańcuchy szablonowe
W starszych wersjach języka JavaScript, przed wprowadzeniem ES6, aby utworzyć wieloliniowy łańcuch znaków, musieliśmy użyć ciągów znaków złożonych z operatora ( + ) i specjalnego znaku nowej linii ( \n ). Oto przykład:
const multiLineString = 'To jest łańcuch \n' +'znaków wielowierszowy. \n' +'Można go tworzyć poprzez \n' +'dodanie znaku nowej linii \n' +'i operatora konkatenacji.';console.log(multiLineString);
Używając łańcuchów szablonowych, nie musimy stosować dodatkowej składni. Wystarczy umieścić go wewnątrz backticków i wcisnąć w odpowiednim miejscu klawisz enter, a system automatycznie wykryje każdą nową linię. Ten sam przykład z użyciem nowej wersji ES, prezentuje się w ten sposób:
const multiLineString = `To jest łańcuchznaków wielowierszowy.Można go tworzyć poprzezumieszczenie każdej nowej liniiwewnątrz backticków.`;console.log(multiLineString);
Oznaczone łańcuchy szablonowe.
Jest to dodatkowa funkcjonalność wprowadzona w ES6. Pozwala na bardziej zaawansowane manipulowanie łańcuchami.
Funkcja ta zazwyczaj przyjmuje dwa argumenty. Pierwszy argument funkcji zawiera tablicę wartości łańcuchowych drugi to tablica wyrażeń przekazanych do łańcucha.
Funkcja ta zazwyczaj przyjmuje dwa argumenty. Pierwszy argument funkcji zawiera tablicę wartości łańcuchowych drugi to tablica wyrażeń przekazanych do łańcucha.
function taggedTemplate(strings, ...values) {// jakas wartość}
Oznaczone łańcuchy szablonowe pozwalają na bardziej zaawansowane manipulowanie łańcuchami szablonowymi, ale wymagają dodatkowego kodu w postaci funkcji oznaczającej. W starszych wersjach języka JavaScript nie było takiej funkcjonalności, co oznaczało, że bardziej zaawansowane operacje na łańcuchach szablonowych wymagały bardziej skomplikowanego kodu. Przykłady użycia:
Formatowanie daty:
function formatDate(strings, ...values) {const date = new Date(...values);return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;}const date = new Date("2023-03-19");const formattedDate = formatDate`Date: ${date}`;console.log(formattedDate); //"19/3/2023"
W powyższym przykładzie funkcja formatDate oznacza łańcuch szablonowy i przetwarza wartości wstawione do niego, aby sformatować datę w odpowiedni sposób.
Walidacja danych wejściowych:
function validateInput(strings, ...values) {const regex = /^[a-zA-Z0-9]+$/;for (const value of values) {if (!regex.test(value)) {return "Invalid input";}}return "Valid input";}const input1 = "ValidInput123";const input2 = "Invalid Input 123";const validationResult = validateInput`Input 1: ${input1}, Input 2: ${input2}`;console.log(validationResult); // "Invalid input"
W tym przypadku funkcja validateInput oznacza łańcuch szablonowy i wykonuje walidację danych wejściowych, aby upewnić się, że każda wartość składa się tylko z liter i cyfr.
Podsumowanie
ECMAScript 2015 przyniosło wiele usprawnień wraz z wprowadzeniem nowych literałów. Między innymi:
- Łatwiejsze tworzenie złożonych ciągów znaków tekstowych.
- Unikanie problemów związanych z koniecznością łączenia wielu znaków ciągów tekstowych (nie trzeba korzystać z operatora konkatenacji).
- Wsparcie dla wieloliniowych ciągów znaków (nie musimy korzystać ze znaków specjalnych takich jak np. ( \n ).
- Interpolacja wartości - dzięki temu, że łańcuchy szablonowe pozwalają na umieszczanie zmiennych wewnątrz ciągów tekstowych, można łatwo wstawiać zmienne do szablonów, co ułatwia pisanie kodu.
- Oznaczone szablony - łańcuchy szablonowe pozwalają na tworzenie oznaczonych szablonów, które pozwalają na przetwarzanie wartości umieszczonych wewnątrz szablonu przed zwróceniem wyniku.
Podsumowując, łańcuchy szablonowe są łatwiejsze w użyciu niż tradycyjne ciągi tekstowe i oferują szereg funkcjonalności, które ułatwiają pisanie kodu.
W przyszłym tygodniu omówimy FUNKCJE STRZAŁKOWE.
Źródła
- MDN
- JavaScript: The Recent Parts - kurs dostępny na platformie Frontend Masters
- JavaScript Tutorial
- JavaScript Info