Рубрики
Без рубрики

Напечатайте свои строки JavaScript

Особенностью New-ish of JavaScript – это буквальный шаблон. Это в основном модная струна, которая позволяет вам … Помечено JavaScript, WebDev, программирование, Teadercript.

Особенности 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”