Особенности New-ish of JavaScript – Шаблон литерал . Это в основном модная нить, которая позволяет интерполировать вещи и использовать новые линии. Но шаблонные литералы имеют еще одну функцию, которая не так хорошо известна, наверное, потому что они немного странно и трудно найти случаи использования.
Эта функция – «меченый» шаблон. Ниже я выделяю мой любимый корпус на использование для помеченных шаблонов: предотвращение того, чтобы строки заставить свой код выглядеть отвратительным.
Длинные струны слов
Все говорят, что ограничивают, сколько символов появляется в каждой строке вашего кода. Эта неточная директива – это проблема для одного вида данных, в частности: строки. Один строковый литерал может быть дольше, чем эти 80 символов, и вы не можете ревертировать эту длину.
Ну так что ты делаешь?
Классическое решение выглядит так:
const myString = "Oh how I wish " + "that this string was shorter " + "so that I didn't have to break " + "it up like this. I mean seriously " + "look how hard it is to read! " + "and edit!"
Отвратительный.
Это то, что мы можем значительно улучшить с меченым шаблоном. Я сделал тег под названием Oneline
Что позволяет вам использовать столько разрывов строк, и столько отступа, сколько вы хотите, пока все еще заканчивая oneline String! (Для Oneline
Код см. Внизу этой статьи.)
const myString = oneline` When you console log this it will just be one long line. It looks like a bunch. But it's just one. I can even ident the rows. I could have started the first line right after that first tick, and can put the final tick on its own line or at the end of this one. `;
Пока эта строка выглядит Как у него есть куча новых линий и вкладки в нем, на самом деле это не так. То, что вы видите, это не то, что вы получаете с помеченными шаблонами. Здесь, что вы на самом деле получаете, это MyString
это одна длинная строка без дополнительных пробелов или новых линий.
Отступ кода совпадения с многослойными строками
Существует еще одна распространенная проблема с строками в коде: вдавливание в многослойных струнах. Шаблонные литералы позволяют нам положить перерывы в наших струнах (без явного типа \ N
), давая нам два варианта из ворот для решения новых линий и отступов:
const myString = "Title\n" + " Indented line 1\n" + " Indented line 2\n Indented Line 3\n"; const myString = `Title Indented Line 1 Indented Line 2 Indented Line 3 `;
Эй, этот шаблон литерал вообще не выглядит плохо, делает это! Но Как насчет сейчас:
function myFunction(){ let myString; if(someCondition){ if(someOtherCondition){ myString = `Title Indented Line 1 Indented Line 2 Indented Line 3 `; } } }
Валовой. Поскольку шаблон литерал использует пробел именно так, как напечатано, ваша многослойная строка не может придерживаться отступа кода в его контексте. То есть, если мы не используем меченый шаблон. Я сделал тег под названием Асеннтмент
Это позволяет писать многослойные струны во время прилипания к отступе контекста кода. Я называю это «проблемным», потому что он удаляет лишние углубления. (Для NEZENT
Код см. Внизу этой статьи.)
// Same *result* as before, but allowing indentation to match the code. function myFunction(){ let myString; if(someCondition){ if(someOtherCondition){ myString = undent` Title Indented Line 1 Indented Line 2 Indented Line 3 `; } } }
Как это работает
Метки шаблонов являются обычными старыми функциями, которые получают содержимое шаблона литерала в качестве куча строк и интерполированных значений. Если вы держите их вместе, вы получаете всю строку. Функция метки позволяет вам делать вещи до Сшивая все это вместе, если вы хотите.
Вот код (в типографии):
/** @file https://github.com/bscotch/node-util/blob/main/src/lib/strings.ts **/ /** * Concatenate the string fragments and interpolated values * to get a single string. */ function populateTemplate(strings:TemplateStringsArray,...interps:string[]){ let string = ''; for(let i = 0; ident1.length-dent2.length); const minDent = dents[0]; if(!minDent){ // Then min indentation is 0, no change needed return string; } const dedented = string.replace(new RegExp(`^${minDent}`,'gm'),''); return dedented; } /** * Remove linebreaks and extra spacing in a template string. */ export function oneline(strings:TemplateStringsArray,...interps:string[]){ return populateTemplate(strings,...interps) .replace(/^\s+/,'') .replace(/\s+$/,'') .replace(/\s+/g,' '); }
Я включил эти теги шаблона в модуль утелительного узла Я использую в большинстве моих проектов. Это быстрый способ попробовать их.
Я хотел бы услышать о ваших любимых случаях использования для помеченных шаблонов!
Присоединяйся к Рассылка devchat. Чтобы получить больше таков, а также обсуждение предпринимательства и Геймеду.
Оригинал: “https://dev.to/adamcoster/prettify-your-javascript-strings-4gf8”