名前空間したい
1// const オブジェクト = {キー: 値};
2const 名前空間 = {キー: 関数定義};
GASプロジェクトの中で、関数はグローバルに定義されます。 そのため、ファイル名を分けても、同じ名前の関数は利用できません。
もし、同じ名前の関数を使用する必要がある場合、 オブジェクト型を使って名前空間(のようなもの)を定義できます。
注釈
オブジェクトを使った名前空間の作成は、モジュール(import
やrequire
)が標準化される以前のJavaScriptで一般的な方法だったようです。
1// ns1.gs
2const 名前空間1 = {
3 同じ関数名: function(引数) {
4 Logger.log("これは ns1 の関数")
5 }
6}
1// ns2.gs
2const 名前空間2 = {
3 同じ関数名: function(引数) {
4 Logger.log("これは ns2 の関数")
5 }
6}
1// 確認してないけど、これでもOKなはず
2// ns3.gs
3const 名前空間3 = {};
4名前空間3[同じ関数名] = function(引数) {
5 Logger.log("これは ns3 の関数")
6 }
1// main.gs
2function main () {
3 名前空間1.同じ関数名(引数); // -> これは ns1 の関数
4 名前空間2.同じ関数名(引数); // -> これは ns2 の関数
5 名前空間3.同じ関数名(引数); // -> これは ns3 の関数
6};
注意
GASはV8エンジン対応でモダンなJSを使えるようになりましたが、ES6のモジュールシステムはサポートされてないらしいです。 いろいろがんばればモジュールシステムを使うこともできるようですが、ここでは深追いしません。