Part5:名前空間とモジュール

海未「ではモジュールの話をしましょう。ことり、イベントの件は、今は、その」
ことり「うん、後でゆっくりね♪」

海未「モジュールと言いましたが、現在はmoduleではなくnamespaceというキーワードが使われます。いわゆる名前空間ですね」

海未「名前空間の概念は、Node.jsの時に出てきたモジュールと同じです。書き方が少しだけ異なるので、そこだけ覚えれば大丈夫でしょう」
ことり「Node.jsだとmodule.exports = function() {...}みたいにしてたよね」
海未「モジュールには内部モジュールと外部モジュールがあります。そういえばNode.jsの時には外部モジュール、つまり他のファイルに対してクラスや関数を公開するものしか説明しませんでした」

海未「内部モジュールから説明しますね。これは1つのファイルの中で、クラスや関数をグループ分けするものです」

海未「グローバルな名前空間にクラスがたくさんできるとわかりにくいですし、名前の衝突などの問題も出てきますから、このようにカテゴリ別にモジュールにまとめるとすっきりしますね」
穂乃果「同じIdolって名前のクラスでも、名前空間が違えば違うクラスなんだね」
海未「はい。Student.IdolTarent.Idolは共存できますね」
ことり「きっとexportしたクラスとか関数だけが外から見えるんだよね。クラスのprivateとかもそうだけど、見えるところと見えないところをちゃんと管理できるんだ」
海未「このアクセス制御も、JavaScriptが抱えている問題の1つですから。これで意図しないAPIを呼び出されたりする心配が減りますね」
ことり「でもことりには、海未ちゃんのprivateはちゃんと見えるよ♪ ばーん」
海未「そ、そんなC++のfriendみたいなことがあるはずが・・・」
穂乃果(ほんとに見えてそうで怖いよね・・・)

海未「外部モジュールはNode.jsの時に説明したように、ファイルの外部へ機能を公開するモジュールです」

海未「モジュール側はこのようになります。これを利用する側は」

海未「このように呼び出せます。呼び出す側はNode.jsとほぼ同じですね」
穂乃果「これなら難しくないね」
海未「1つ注意点なのですが、外部モジュールを使う場合は、コンパイル時にNode.jsであればtsc --module commonjs app.ts、ブラウザであればtsc --module amd app.tsのようにオプション付きでコンパイルする必要があります」

海未「これはNode.jsではそのまま動作しますが、ブラウザ上で動作させる場合はRequire.jsなどのライブラリが必要になりますから、そのあたりは各自調べてみてください」

海未「次回はJavaScriptにはなかったインターフェイスという機能を見てみましょう」
ことり「じゃ、海未ちゃん、行こっか」
海未「・・・はい」
穂乃果「う、海未ちゃん!生きて帰ってきてねっ!」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です