Je sais que c'est une vieille réponse, mais en voyant les réponses ci-dessus, je me sens obligé de répondre à la fois à la question pure et à l'esprit de la question posée.
Peut-on utiliser des commentaires dans les chaînes littérales des modèles ?
Oui. Oui, vous pouvez. Mais ce n'est pas joli.
const fields = `
id, ${/* post ID */''}
message, ${/* post/status message */''}
created_time, ${/*... */''}
permalink_url,
type
`;
Notez que vous devez mettre ''
(une chaîne vide) dans le ${ }
afin que Javascript dispose d'une expression à insérer. Si vous ne le faites pas, vous obtiendrez une erreur d'exécution. Les guillemets peuvent être placés n'importe où à l'extérieur du commentaire.
Je n'en suis pas très fan. C'est assez laid et cela rend les commentaires encombrants, sans parler du fait qu'il est difficile d'alterner les commentaires dans la plupart des IDE.
Personnellement, j'utilise autant que possible des chaînes modèles, car elles sont un peu plus efficaces que les chaînes classiques et elles capturent littéralement tout le texte que vous voulez, la plupart du temps sans échappement. Vous pouvez même y placer des appels de fonction !
La chaîne de l'exemple ci-dessus sera toutefois un peu étrange et potentiellement inutile pour ce que vous recherchez, car il y aura un saut de ligne initial, un espace supplémentaire entre la virgule et le commentaire, ainsi qu'un saut de ligne final supplémentaire. La suppression de cet espace indésirable pourrait avoir un impact limité sur les performances. Vous pourriez utiliser une expression rationnelle pour cela, pour plus de rapidité et d'efficacité... plus d'informations à ce sujet ci-dessous...
.
Pour répondre à l'objet de la question :
Comment écrire une liste délimitée par des virgules, avec des commentaires sur chaque ligne ?
const fields = [
"id", // post ID
"message", // post/status message
"created_time", //...
"permalink_url",
"type"
].join(",\n");
Joindre un tableau est une façon... (comme suggéré par @jared-smith )
Cependant, dans ce cas, vous créez un tableau et vous rejetez immédiatement les données organisées lorsque vous n'assignez que la valeur de retour de la fonction join()
fonction. De plus, vous créez un pointeur de mémoire pour chaque chaîne du tableau, qui ne sera pas ramassé jusqu'à la fin du champ d'application. Dans ce cas, il peut être plus utile de capturer le tableau, en le joignant à la volée en fonction de l'utilisation, ou d'utiliser un modèle littéral et de commenter différemment votre implémentation, comme dans le style ghostDoc.
Il semble que vous n'utilisiez les littéraux de modèle que pour satisfaire le désir de ne pas avoir de guillemets sur chaque ligne, minimisant ainsi la dissonance cognitive entre les paramètres de requête "chaîne" tels qu'ils apparaissent dans l'url et le code. Vous devez être conscient que cela préserve les sauts de ligne, et je doute que ce soit ce que vous souhaitiez. Envisagez plutôt de le faire :
/****************
* 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,'');
Cette méthode utilise une expression rationnelle pour filtrer tous les espaces blancs, tout en conservant une liste lisible et réorganisable. Tout ce que fait le littéral de la regex est de capturer les espaces blancs, puis la méthode replace remplace le texte capturé par ''
(le g
à la fin indique simplement à l'expression rationnelle de ne pas s'arrêter à la première correspondance qu'elle trouve, dans ce cas, le premier caractère de retour à la ligne).
ou, plus ennuyeux, vous pourriez simplement mettre les commentaires directement dans votre modèle littéral, puis les supprimer avec une regex :
const fields = `
id, // post ID
message, // post/status message
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\*\/\n/g,'').replace(/\s/g,'');
Cette première regex trouvera et remplacera une chaîne vide ( ''
) toutes les occurrences de : un ou plusieurs caractères d'espacement qui précèdent une double barre oblique (chaque barre oblique est échappée par une barre oblique inverse) suivie d'un espacement et du caractère de retour à la ligne. Si vous voulez utiliser /* multiline */
cette regex devient un peu plus complexe, vous devrez ajouter une autre .replace()
à l'extrémité :
.replace(/\/\*.*\*\//g,'')
Cette expression rationnelle ne peut être utilisée qu'après avoir supprimé l'élément \n
ou l'expression rationnelle ne correspondra pas au commentaire qui n'est plus multiligne. Cela ressemblerait à quelque chose comme ceci :
const fields = `
id, // post ID
message, /* post/
status message */
created_time, // ...
permalink_uri,
type
`.replace(/\s+\/\/.*\n/g,'').replace(/\s/g,'').replace(/\/\*.*\*\//g,'');
Toutes les opérations ci-dessus aboutissent à la chaîne suivante :
"id,message,created_time,permalink_uri,type"
Il y a probablement un moyen de faire cela avec une seule regex, mais cela dépasse le cadre du présent document. D'ailleurs, je vous encourage à tomber amoureux des regex en jouant avec elles vous-même !
J'essaierai d'obtenir un https://jsperf.com/ Nous reviendrons sur ce point plus tard. Je suis très curieux maintenant !