アプリ版:「スタンプのみでお礼する」機能のリリースについて

Google Apps Scriptの勉強をしている者です。やっと何とかわかってきたところというレベルです。

どうしてもわからないことがあって、教えてもらったものの中で以下のような記述がfunction main()の前(上?)にありました。読み解こうと調べてみたのですが、まったくわかりません。今までかなりGASをネット検索してきましたが、このような記述は見た記憶もありません。

わかる方は教えていただけますでしょうか。もしくはこのサイトを見たら、説明があるというのでもかまいません。

ちなみにfunction main()はスプレッドシートからGmailを送信するという内容です。

// Compiled using ts2gas 3.4.4 (TypeScript 3.5.3)
var exports = exports || {};
var module = module || { exports: exports };
"use strict";

A 回答 (7件)

以下のサイトが見つかりました。


https://www.nowhere.co.jp/blog/archives/20211126 …

.gsファイルがたくさん増えたときに、どこの関数か迷子にならないために、moduleとexportsというものを使うテクニックがあるようです。

とりあえず、いまお使いのスクリプトの中の、質問文に引用されているところ以外で、moduleや、module.exportsが使われているかどうか、確認してみてください。

使われていれば、ほかの.gsファイルとの関係が分かりやすくなっているのではないかと思います。
使われていなければ、ts2gasによって、自動出力されているだけなので、そのスクリプトを詳細に調べても、何の意味があるのか、どんなメリットがあるのか、分からないと思います。
    • good
    • 0
この回答へのお礼

忙しい中、回答ありがとうございます。

>.gsファイルがたくさん増えたときに、どこの関数か迷子にならないために、moduleとexportsというものを使うテクニックがあるようです。
そういうことだったのですね。

教えていただいたサイトを見たり、他のサイトを見たところ、どうもTypescriptというJavascriptと互換性のあるようなプログラム言語を使っているみたいですね。

よくわからなかったのですが、以下のサイトではTypescript からGASのコードを書いているようです。誤解していたらすみません。
https://tech.actindi.net/2018/09/10/083314

まだGASを勉強中の私にはレベルが高すぎるようですので、いったんGASの勉強に集中したいと思います。

いろいろ教えていただきありがとうございました。

お礼日時:2024/03/17 18:39

>なんの定型的なパターンなんでしょう?



広く言えばJavaScriptにおける初期化の定型的なパターンです。
例えば外部リソースを取得する時や環境によって参照先が無いケース(例えばサーバーダウンで外部リソースを引っ張れないとか)の際にunderfineで処理が実行できなくなると困るので確実に初期化できる方を参照不可の時にだけ使います。
元から確実にある方を使わないのはバージョンの更新の恩恵を受けたいとか、様々な理由からなります。
exportsは変数名です。日本語で言えば読み込んだリソースの事です。「読み込み」に失敗した際は{}というオブジェクトを入れたいという意図に思えます。

定型的なパターンではコメントが書かれないので難しいですよね。
解決しましたら幸いです。
目的を見失わないように頑張ってください。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。

>exportsは変数名です。日本語で言えば読み込んだリソースの事です。
「読み込んだリソース」というのがわかりません。以下のようにfunction main()の外に記述されているんですが。

// Compiled using ts2gas 3.4.4 (TypeScript 3.5.3)
var exports = exports || {};
var module = module || { exports: exports };
"use strict";
function main() {

}

私の知識不足もあり、回答がよく理解できない状況です。もし可能でしたら、解説してあるようなサイトの紹介でもしていいただけないでしょうか。

お礼日時:2024/03/17 08:19

>・・省略・・そもそもexportsとは何を受けているんでしょうか?


➡︎ごめんなさい。 私、こういうのを組めないので分かりません。

ただ、exports に{}(空欄?}を代入しなさい。
という、内容だと思います。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。

var exports = exports || {};の解説があるGASまたはJavascriptのサイトでもあればいいのですが、見つからないんですよね。

お礼日時:2024/03/17 08:14

定型的なパターンです。


左の値が初期化されていなかったら右の値で確実に初期化するために使います。

ちなみに演算子の意味から考えることも出来ますが。
    • good
    • 0
この回答へのお礼

忙しい中、回答ありがとうございます。

>定型的なパターンです。
何の定型的なパターンなんでしょうか?GASの解説サイトでも見たことのない記述なんですが。質問ばかりですみません。m(__)m

お礼日時:2024/03/16 05:44

こんばんは



すでにNo2様が回答している通りですが・・・

演算子 || は論理和を求める演算子です。(一般的にはOR演算子)
論理値に対して用いた場合は true/false を返しますが、倫理値以外に用いた場合は、true評価になる値そのものを返します。
https://developer.mozilla.org/ja/docs/Web/JavaSc …

実際の使用例と、説明はこちらがわかりやすいかもしれません。
https://zenn.dev/fujii0112/articles/78fe69c4c30731
    • good
    • 0
この回答へのお礼

忙しい中、回答ありがとうございます。

演算子の||はわかりますが、exportsの意味がわかりません。そもそもexportsとは何を受けているんでしょうか?

お礼日時:2024/03/16 05:42

それはJavaScriptなどでよく見る記法ですね。


var exports = exports || {};の場合、
先ずexports || {} と言う式はexportsを評価し、exportsがtrueだったら、exportsの値を、falseだったら{}の値を返すと言うものです。
つまり、先程のvar exports = exports || {};はexportsがtrueだったらexportsをfalseだったら{}をexportsに代入すると言うものです。
    • good
    • 0
この回答へのお礼

忙しい中、回答ありがとうございます。

||はorの意味だというのはわかります。意味がよくわからないのですが。exportsがいきなり出てきて何をうけているのかがよくわからないのです。

お礼日時:2024/03/16 05:41

私はそういうのを組んだことありませんので、誤った回答と思われたら、遠慮無く無視してください。



コーディングを見ると「;」は{続きがある}という記号に思えます。
つまり、
var exports = exports || {};
var module = module || { exports: exports };
"use strict";

は、

var exports = exports || {} var module = module || { exports: exports } "use strict";

であり、言葉にすると・・

var exports = exports || {} @続きあり
var module = module || { exports: exports } @続きあり
"use strict" @続きあり

という事になると思います。
コーディングを見やすくするためのルールだと思います。
    • good
    • 0
この回答へのお礼

忙しい中、回答ありがとうございます。

exports = exportsの意味がわからないんです。exportsにexportsを代入する?そもそもexportsとは何を受けているんでしょうか?

お礼日時:2024/03/16 05:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A