Я знаю, что это старый ответ, но, увидев ответы выше, я чувствую себя обязанным ответить как на чистый вопрос, так и на дух вопроса спрашивающего.
Можно ли использовать комментарии в литеральных строках шаблона?
Да. Да, ты можешь. Но это некрасиво.
const fields = `
id, ${/* post ID */''}
message, ${/* post/status message */''}
created_time, ${/*... */''}
permalink_url,
type
`;
Обратите внимание, что вы должны поместить ''
(пустую строку) в скобки ${ }
, чтобы у Javascript было выражение для вставки. Если этого не сделать, возникнет ошибка времени выполнения. Кавычки могут быть в любом месте за пределами комментария.
Я не большой поклонник этого. Это довольно уродливо и делает комментирование громоздким, не говоря уже о том, что переключение комментариев становится затруднительным в большинстве IDE.
Лично я использую шаблонные строки везде, где это возможно, так как они немного эффективнее обычных строк и захватывают буквально весь текст, который вы хотите, в основном без экранирования. Вы даже можете поместить туда вызовы функций!
Строка в приведенном выше примере будет немного странной и потенциально бесполезной для того, что вы ищете, так как будет начальный разрыв строки, дополнительный пробел между запятой и комментарием, а также дополнительный финал. Разрыв строки. Удаление этого нежелательного пространства может стать небольшим ударом по производительности. Вы можете использовать регулярное выражение для этого, для скорости и эффективности, хотя... подробнее об этом ниже...
.
Теперь, чтобы ответить на цель вопроса:
Как написать строку списка, разделенную запятыми, с комментариями в каждой строке?
const fields = [
"id", // post ID
"message", // post/status message
"created_time", //...
"permalink_url",
"type"
].join(",\n");
Присоединение к массиву - это один из способов... (как предложил @jared-smith)
Однако в этом случае вы создаете массив, а затем сразу же отбрасываете организованные данные, когда вы только назначаете возвращаемое значение функции join()
. Мало того, вы создаете указатель памяти для каждой строки в массиве, который не будет собирать мусор до конца области. В этом случае может быть полезнее захватить массив, объединяясь на лету, как того требует использование, или использовать литерал шаблона и по-разному комментировать свою реализацию, например, в стиле ghostDoc.
Кажется, что вы используете литералы шаблонов только для того, чтобы удовлетворить желание не иметь кавычек в каждой строке, сводя к минимуму когнитивный диссонанс между «строковыми» параметрами запроса, когда они выглядят в URL-адресе и коде. Вы должны знать, что это сохраняет разрывы строк, и я сомневаюсь, что вы этого хотите. Вместо этого рассмотрим:
/****************
* Fields:
* id : post ID
* message : post/status message
* created_time : some other comment...
*/
const fields = `
id,
message,
created_time,
permalink_uri,
type
`.replace(/\s/g,'');
Это использует регулярное выражение для фильтрации всех пробелов, сохраняя при этом список читаемым и перестраиваемым. Все, что делает литерал регулярного выражения, — это захват пробела, а затем метод replace заменяет захваченный текст на ''
(g
в конце просто говорит регулярному выражению не останавливаться на первом найденном совпадении, в данном случае на первом символе новой строки. )
или, что самое неприятное, вы можете просто поместить комментарии прямо в литерал вашего шаблона, а затем удалить их с помощью регулярного выражения:
const fields = `
id, // post ID
message, // post/status message
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\*\/\n/g,'').replace(/\s/g,'');
Это первое регулярное выражение найдет и заменит пустой строкой (''
) все экземпляры: одного или нескольких пробельных символов, предшествующих двойной косой черте (каждая косая черта экранируется обратной косой чертой), за которыми следует пробел и символ новой строки. Если вы хотите использовать комментарии /* multiline */
, это регулярное выражение станет немного сложнее, вам придется добавить еще одно .replace()
в конце:
.replace(/\/\*.*\*\//g,'')
Это регулярное выражение может работать только после того, как вы удалите \n
новых строк, иначе регулярное выражение не будет соответствовать комментарию «теперь не многострочный». Это будет выглядеть примерно так:
const fields = `
id, // post ID
message, /* post/
status message */
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\n/g,'').replace(/\s/g,'').replace(/\/\*.*\*\//g,'');
Все вышеперечисленное приведет к этой строке:
"id,message,created_time,permalink_uri,type"
Вероятно, есть способ сделать это только с одним регулярным выражением, но на самом деле это выходит за рамки. Кроме того, я бы посоветовал вам полюбить регулярные выражения, поиграв с ними самостоятельно!
Я постараюсь узнать об этом позже на https://jsperf.com/. Мне сейчас очень любопытно!
31.01.2018