JavaScript Academy · Aula

Funções de template com tag

Processe partes de templates com funções de tag.

Aula 3 de 413 etapas

Funções de template com tag é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

O que é uma função de marcação

Um literal de modelo marcado é uma chamada de função em que o nome da função aparece diretamente antes de um literal de modelo. A função recebe as partes analisadas do modelo e pode transformá-las.

function tag(strings, value) {
  return strings[0] + value.toUpperCase() + strings[1]
}
console.log(tag(["Hi ", "!"], "bob"))

O vetor de cadeias de caracteres

O primeiro argumento recebido por uma função de marcação é um vetor das partes de cadeia de caracteres literais. Esses são os trechos de texto que ficam entre e ao redor dos marcadores de posição.

function tag(strings) {
  return strings.join("|")
}
console.log(tag(["a", "b", "c"]))

Os valores

Depois do vetor de cadeias de caracteres, a função de marcação recebe cada valor interpolado como um argumento separado. Usar parâmetros restantes os reúne em um vetor.

function tag(strings, ...values) {
  return values.join(",")
}
console.log(tag(["", " and ", ""], "x", "y"))

Remontando a cadeia de caracteres

Uma marcação típica percorre o vetor de cadeias de caracteres e insere cada valor entre as partes, reconstruindo a cadeia de caracteres final com a transformação que você quiser.

function tag(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? values[i] : "")
  })
  return out
}
console.log(tag(["A", "B", "C"], 1, 2))

Regra do tamanho das cadeias de caracteres

O vetor de cadeias de caracteres sempre tem exatamente um elemento a mais que o vetor de valores. Há texto antes do primeiro marcador de posição e depois do último, mesmo que algumas partes estejam vazias.

function tag(strings, ...values) {
  return "strings=" + strings.length + " values=" + values.length
}
console.log(tag(["", "", ""], 1, 2))

Transformando valores

Como a marcação controla a forma como os valores são inseridos, você pode formatá-los. Aqui, cada valor numérico é duplicado antes da inserção.

function dbl(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? values[i] * 2 : "")
  })
  return out
}
console.log(dbl(["", " ", ""], 3, 4))

Retornando valores que não são cadeias de caracteres

Uma função de marcação não precisa retornar uma cadeia de caracteres. Ela pode retornar qualquer valor, como um objeto ou vetor criado a partir das partes do modelo.

function parts(strings, ...values) {
  return { strings: strings, values: values }
}
const r = parts(["a", "b"], 9)
console.log(r.values[0])

A propriedade raw

O vetor de cadeias de caracteres também possui uma propriedade raw, que contém as cadeias sem o processamento das sequências de escape. É assim que String.raw funciona.

console.log(String.raw({ raw: ["a\\n", "b"] }, "X"))

Colocando interpolações em maiúsculas

Uma função de marcação comum de demonstração coloca cada valor interpolado em maiúsculas, deixando o texto estático intacto.

function loud(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? String(values[i]).toUpperCase() : "")
  })
  return out
}
console.log(loud(["name is ", "."], "alice"))

Por que usar marcações

As funções de marcação permitem padrões poderosos: escapar entradas não confiáveis, internacionalização, construção de SQL ou consultas e formatação personalizada, tudo orientado pela estrutura do modelo.

function highlight(strings, ...values) {
  let out = ""
  strings.forEach(function (s, i) {
    out += s + (values[i] !== undefined ? "[" + values[i] + "]" : "")
  })
  return out
}
console.log(highlight(["score: ", " pts"], 42))

Ignorando valores

Uma função de marcação pode escolher ignorar completamente os valores interpolados e produzir uma saída baseada apenas nas partes estáticas, o que é útil para análise ou registro.

function onlyStatic(strings) {
  return strings.filter(function (s) { return s.length > 0 }).join(" ")
}
console.log(onlyStatic(["Hello ", " world ", ""]))

Verificação rápida

Teste seus conhecimentos sobre funções de marcação.

Recapitulação

Recapitulação: Os modelos marcados chamam uma função com as partes analisadas do modelo.

  • O primeiro argumento é a matriz de textos
  • Os argumentos restantes são os valores interpolados
  • A matriz de textos tem um elemento a mais que a matriz de valores
  • A propriedade raw contém o texto não processado
function tag(s, ...v) { return s[0] + v[0] }
console.log(tag(["go "], "fast"))
Grátis para começar

Aprenda JavaScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
59
Aulas
200

Perguntas Frequentes

A aula “Funções de template com tag” é grátis?

Sim — o texto completo de “Funções de template com tag” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Funções de template com tag”?

Processe partes de templates com funções de tag. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Funções de template com tag”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos da interpolação de strings
  2. Strings multilinha
  3. Funções de template com tag
  4. Casos de uso práticos de templates com tag
← Voltar para JavaScript Academy