As Strings no JavaScript possuem várias limitações, diferente de outras linguagens como Python, que naturalmente permitem artifícios como o uso de múltiplas linhas. Mas isso mudou com a chegada do ECMAScript 6, que introduziu as template Strings.
Template Strings em JavaScript são Strings que permitem expressões embutidas, interpolação e uso de múltiplas linhas para uma mesma String. Além disso, há possibilidade de formatação de Strings e o uso de tags no HTML para Strings.
Sintaxe
Antes de mais nada, é importante saber que as template Strings são marcadas pelos acentos graves (` `), o acento de crase; também conhecidos como back ticks. Possuem a seguinte sintaxe:
`${String}`
Utilidades
Substituição de Strings
Digamos que você queira criar uma função para dizer “Oi!” para determinadas pessoas. Um jeito simples de fazer isso é usando Strings:
function saudacao(){
console.log("Oi Camila!")
}
saudacao()
Nesse caso, se quiséssemos cumprimentar várias pessoas, teríamos que ter várias functions saudação. Ou seja, é bem mais complicado. O valor nunca seria diferente, pois para cada chamada seria impresso o valor modificado.
Uma possível solução seria criar outras functions: saudacao2, saudacao3, etc, mas isso deixaria o código extenso e de difícil compreensão. Desse modo, se usarmos template Strings o problema pode ser resolvido da seguinte forma:
function saudacao(nome){
console.log(`Oi ${nome}!`)
}
saudacao("Camila")
saudacao("José")
saudacao("Matheus")
saudacao("Ana")
Strings em Múltiplas Linhas
É possível usar Strings em múltiplas linhas, dessa forma:
console.log('Exemplo de String\n' +
'Em múltiplas linhas')
Mas existe um jeito ainda mais simples de se obter o mesmo efeito, usando template Strings:
console.log(`Exemplo de Template String
em múltiplas linhas`)
Note que com a template String não é necessário o uso do \n, nem concatenar com a String seguinte. A String em múltiplas linhas são duas Strings concatenadas, enquanto que a template String resolve o problema em uma só estrutura.
Interpolação de Expressões
Esse outro cenário também pode ser resolvido com Strings com a seguinte sintaxe:
let a = 2
let b = 3
console.log('Cinco é ' + (a + b) + ' e\nnão ' + (3 * a + b) + '.')
Usando Template Strings a solução fica bem mais simples:
let a = 2
let b = 3
console.log(`Cinco é ${a + b}
e não ${3 * a + b}.`)
Tagged Template Strings
As tagged template Strings em JavaScript são uma forma mais avançada de template Strings. Elas permitem a marcação das mesmas com uma função, e que essa função modifica a saída final das strings.
A sua sintaxe é muito parecida com a de uma função normal, porém a chamada dela é diferente:
function taggedTemplateString(strings) {
console.log(strings)
}
taggedTemplateString`Uma marcação bem diferente!` //imprime ['Uma marcação bem diferente!']
Pode-se ainda encadear à essa chamada uma outra tagged template, dessa maneira:
function taggedTemplateString(strings, valores) {
console.log(strings, valores)
}
let outraString = 'E não é que funciona mesmo?'
taggedTemplateString`Uma marcação bem diferente! ${outraString}`
E assim pode-se continuar acrescentando parâmetros quanto mais valores se queira informar à função.
Referências
- CSS Tricks. Template Literals.
- Developers Google. Getting Literal With ES6 Template Strings.
- MDN Web Docs. Template Strings.