テンプレートリテラルとは
テンプレートリテラルは ES6 で新しく出た、文字列を扱うための構文です。
文字列として扱いたい箇所を「`(バッククォート)」で囲うことで使用できます。
これまでのJavaScriptでは「"(ダブルクォート)」と「'(シングルクォート)」がありました。
こちらも文字列を扱うための記述ですが、テンプレートリテラルは文字列内で式を展開できるなど、利点が多くあります。
ぜひ使えるようにしておきましょう!!
テンプレートリテラルの使用例
まずは、習うより実際に手を動かそう!!
ってことで、実際にテンプレートリテラルの記述方法と出力結果をみていきましょう。
ここでは、以下をやっていきます。
- 変数と式の展開
- 改行処理
- エスケープ処理
変数と式の展開
まずは、一番基本となる変数や式の展開です。
javascriptのコード内で使用されている変数や計算式を文字列内に直接、組み込むことができます。
(おそらくこれが一番のメリット)
使い方は、対象の文字列を「(`)バッククォート」で囲むだけでオッケーです!
文字列に変数や計算式を入れるには変数を${}で囲います。
これをテンプレートリテラルを使わないで書くと、こんな感じになります。
こんな感じで、プラス(+)やらクォート(‘)やらたくさんついてしまいます。
たいして変わらない???
では、これだったらどうでしょう?
実際の実装では、要素を動的に出力する際に、HTMLタグを文字列として記述することがあると思います。
その際に、コードを見やすくするため、改行などをする人もいるかと思います。
そうすると、可読性は上がりますが、プラス(+)やクォート( ' )の記述が多くなってしまうデメリットがあります。
テンプレートリテラルを使うことで記述量を極限まで削減することができます。
改行処理
テンプレートリテラルでは、改行コードを書かなくても改行することができます。
もちろん、今まで通り、改行コードを使用することもできます。
エスケープ処理
テンプレートリテラルでは、通常の文字列と同じように、エスケープ処理を行うことも出来ます。
例えば、以下のような文章をテンプレートリテラルを使って出力するとします。
この文字列を出力しようすると、「 hogeという変数が見つかりません」というエラーが出てしまいます。
また、「\n」も文字列ではなく、改行として認識されてしまいます。
この問題を解決するために、エスケープ処理を行う必要があります。
記述方法はエスケープしたい文字の始めに「\(バックスラッシュ)」を付ければOKです。
これを出力すると、
となるはずです!
String.rawを使ってみる
エスケープ処理は「\(バックスラッシュ)」を付けるだけの簡単な作業でしたが、次のような文字列を出力するとしたらどうでしょう?
いちいち、エスケープするのは面倒ですね・・・。
そんなときは「String.raw」を使いましょう!!
String.rawを使用することで特殊文字をエスケープすることが出来ます。
さて、「String.raw`~`」は少し見慣れない記述ですね。
見慣れないけど、これはただの関数です。
次はテンプレートリテラル×関数について見ていきましょう!!
テンプレートリテラルで関数を作ってみよう
テンプレートリテラルを使って関数を作ることも出来ます。
この関数は「タグ付きテンプレートリテラル」と呼ばれています。
まずは、タグ付きテンプレートリテラルの引数を出力する関数(hoge)を作ってみます。
この配列は、それぞれ以下のようになっています。
- 配列[0]:テンプレートリテラルで文字列として扱われている個所の配列
- 配列[1]:1つ目の「${}」で受け取った値
- 配列[2]:2つ目の「${}」で受け取った値
- 以降、「${}」で受け取った値が入ります。
このタグ付きテンプレートリテラルを扱うことで、文字列を自由に扱うことが出来ます。
テンプレートリテラルを使うメリット
ここまで来ると、
「今まで通りで実装できるのに、なぜあえてテンプレートリテラルを使うのか?」
と、疑問をもたれた方もいると思います。
それは全て【シュガーシンタックス】のためなのです!!!
シュガーシンタックス
シュガーシンタックスとは、プログラミング言語の「分かりにくい構文」を「シンプルな構文」に書けるようにしたものです。
分かりやすい例はfor文ですね!
この2つのfor文は、どちらも同じ意味です。
しかし記述量、見やすさとしては明らかにfor-ofの方が優秀だと分かりますね!!
これが数千行と、複雑になってくると、シュガーシンタックスのありがたみを実感できると思います。
同様に、文字列を多く扱う場合はテンプレートリテラルと使用した方が、可読性、メンテナンス性が向上します。
まとめ
テンプレートリテラルとは?
- テンプレートリテラルはECMAScript 6(ES6)で新しく出た、文字列を扱うための構文
- 文字列として扱いたい箇所を「`(バッククォート)」で囲うことで使用できる
- 変数や式の展開が出来る
- タグ付きテンプレートリテラルが扱える
テンプレートリテラルの使用例
変数と式の展開
「${}」で囲うことで文字列に変数や式を展開することが出来ます。
改行
改行コードを記述することなく、改行できます。
エスケープ
「\(バックスラッシュ)」を使うことで特殊コードをエスケープできます。
String.raw
「String.raw」を使うことで、一括でエスケープできます。
タグ付きテンプレートリテラル
テンプレートリテラルを使って関数を作ることが出来ます。
関数の引数は次のようになっています。
・0:テンプレートリテラルで文字列として扱われている個所の配列
・1:1つ目の「${}」で受け取った値
・2:2つ目の「${}」で受け取った値
・以降、「${}」で受け取った値が入ります。
テンプレートリテラルを使うメリット
テンプレートリテラルを使用することで「分かりにくい構文」を「シンプルな構文」にすることが出来ます。
その結果、可読性やメンテナンス性が向上します。
オススメの参考書(Javascript)
ここからは僕が実際に読んで・使ってみて良かった参考書を紹介します!
インターネットでパーツをかき集めて勉強するのもいいですが、参考書を購入した方が効率が良かったりします。
インターネットで勉強するデメリットは、こんな感じになります!
- 記述例を網羅的に書いてあるサイトは少なく、いちいちググらないといけない
- そもそも知らない用語だと検索できない
- 実装は出来るけど、メンテナンス性がイケてないサイトがまぁまぁあるw
こんな感じですね~。
逆に言うと参考書になるとこのデメリットが解消されますね!!
というわけで、長くなりましたが紹介していきます!!!!
本当によくわかるJavaScriptの教科書
ウェブ開発を始めた「駆け出しエンジニア」のための書籍になります。
if文やfor文、DOMの操作方法など入門するには丁度いい内容です。
ネットだけでJavascriptを学習しようとして挫折した方にもオススメです!
JavaScript コードレシピ集
JSを使って何か実装経験がある方向けの書籍になります。
小技やcanvas・json・fetch・class構文などJSで出来ることが網羅的に紹介されています。
これ1冊あれば実務でもかなり重宝します。