Google Scriptsでスクリプトコードを高速化するためにクロージャを使用しようとしています。概念は私には新しかったが、クロージャが以下のコードで正しく適用されるかどうかは疑問だ。 (コードが動作する)この閉鎖は正しいですか、私の推論に間違いがありますか?
背景:このコードは、1か月にどれだけ割合が進んでいるかを計算することです。
関数が呼び出されるたびにnow変数とmonth変数が更新されることは望ましくありませんが、ドキュメントが開かれている場合は一度だけ更新されます。私が本質的に望むのは、すべての変数が一度しか設定されておらず、関数が複数回呼び出された場合にその関数が答えを返すということです。
これはクロージャを使用する正当な理由ですか、正しく使用していますか?
アドバイスと忍耐ありがとうございます。
// calculate progress with second precision
var progressCalc = (function() {
const stMonth = SpreadsheetApp.getActive()
.getRangeByName("pStartdate")
.getValue();
const eoMonth = SpreadsheetApp.getActive()
.getRangeByName("pEndOfMonthDate")
.getValue();
const now = new Date();
var unixProgressEoMonth = unixTime(eoMonth)-unixTime(stMonth)
var unixProgressNow = unixTime(now)-unixTime(stMonth)
return function() { return unixProgressNow/unixProgressEoMonth;};
})();
function progress() {
Logger.log(progressCalc());
return progressCalc();
}
"*私はスクリプトコードのスピードを上げるためにクロージャーで作業しようとしています*" - そうですか?返された関数(クロージャ)は常に同じ値を返すので、複数回実行したり、除算を繰り返す必要はありません。結果値自体をグローバルな 'progressVal'変数に格納するだけで、' progressCalc'の必要はありません。 – Bergi
私はあなたが何を意味するのか分かりません。おそらく私はそれを見ることができるように簡単な例を作ることができますか? – Christoph
「進捗状況」や「progressCalc」がどこで呼び出されたか、そしてクロージャのないオリジナルのコードがどのように見えるかをわかりやすく伝えることができれば、より良い答えを出すことができます。正しく – Bergi