0Pricing
JavaScript Academy · レッスン

タグ付きテンプレート関数

タグ関数でテンプレートの各部分を処理します。

「タグ付きテンプレート関数」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

タグ関数とは

タグ付きテンプレートとは、テンプレートリテラルの直前に関数名を置いて呼び出す形式です。関数はテンプレートを解析した各部分を受け取り、それらを変換できます。

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

文字列配列

タグ関数が受け取る最初の引数は、リテラル文字列の各部分からなる配列です。これはプレースホルダーの間や前後にあるテキストのまとまりです。

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

値

タグ関数は文字列配列に続いて、補間された各値を個別の引数として受け取ります。rest パラメーターを使うと、それらを配列にまとめられます。

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

文字列を再構築する

一般的なタグ関数は文字列配列を順に処理し、各部分の間に値を挿入して、任意の変換を施した最終的な文字列を再構築します。

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))

文字列の長さに関するルール

文字列配列の要素数は、常に値の配列より1つ多くなります。最初のプレースホルダーの前と最後のプレースホルダーの後にもテキストがあるためです。各部分が空の場合も同様です。

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

値を変換する

値の挿入方法をタグ関数が制御するため、値を整形できます。ここでは、挿入する前にすべての数値を2倍にしています。

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))

文字列以外を返す

タグ関数は文字列を返す必要はありません。テンプレートの各部分から作成したオブジェクトや配列など、任意の値を返せます。

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

raw プロパティ

文字列配列には raw プロパティもあり、エスケープシーケンスを処理していない文字列を保持します。String.raw はこの仕組みを利用しています。

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

埋め込み値を大文字に変換する

タグ関数の一般的な例では、静的なテキストはそのままにして、埋め込まれた値をすべて大文字に変換します。

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"))

タグを使う理由

タグ関数を使うと、信頼できない入力のエスケープ、国際化、SQLやクエリの構築、カスタムフォーマットなど、テンプレートの構造に基づく強力な処理を実現できます。

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))

値を無視する

タグ関数は埋め込まれた値を完全に無視し、静的な部分だけに基づいて出力を生成することもできます。これは分析やログ出力に便利です。

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

クイックチェック

タグ関数についての知識を確認してみましょう。

まとめ

まとめ:タグ付きテンプレートは、解析済みのテンプレート部分を引数として関数を呼び出します。

  • 第1引数はstrings配列です
  • 残りの引数は埋め込まれたvaluesです
  • stringsの要素数はvaluesより1つ多くなります
  • rawプロパティには未処理のテキストが保持されます
function tag(s, ...v) { return s[0] + v[0] }
console.log(tag(["go "], "fast"))

よくある質問

「タグ付きテンプレート関数」レッスンは無料ですか?

はい。「タグ付きテンプレート関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「タグ付きテンプレート関数」で何を学びますか?

タグ関数でテンプレートの各部分を処理します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「タグ付きテンプレート関数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 文字列補間の基本
  2. 複数行文字列
  3. タグ付きテンプレート関数
  4. タグ付きテンプレートの実践的な活用例
← JavaScript Academyに戻る