8

Google Apps スクリプトを使用してツールセットを構築することを検討していました。これに関する問題は、私が知る限り、1 つのレベルの組織しか許可されないことです。Stopwatch という名前のライブラリを作成し、メソッド Stopwatch.start() および Stopwatch.stop() を呼び出すことができます。これはかなりクールです。

私が念頭に置いていたのは、Utils.Stopwatch().start() や Utils.Timer.start() などのようなものでした。JavaScript では確かに可能だと思いますが、Apps Script のオートコンプリート機能を壊し続けるには、特定の形式で追加されます。以下は、間違った方法の例です (エラーが発生します) が、おそらく時間を節約できます。この記事に基づいています。

/**
* A stopwatch object.
* @return {Object} The stopwatch methods
*/
function Stopwatch() 
{
  var current;

  /**
  * Stop the stopwatch.
  * @param {Time} time in miliseconds
  */
  function timeInSeconds_(time)
  {
    return time/1000;
  }

  return 
    {
      /**
      * Start the stopwatch.
      */
      start: function() 
      {
        var time = new Date().getTime();
        current = timeInSeconds_(time);
      },

      /**
      * Stop the stopwatch.
      * @return {decimal} time passed since calling 
      *    start (in seconds)
      */
      stop: function() 
      {
        var time = new Date().getTime();
        var difference = timeInSeconds_(time) - this.current;
        return difference.toFixed(3);
      }
    };
}

ありがとう

4

4 に答える 4

4

このような機能が Google によってネイティブにサポートされるまでは、コンストラクター関数と同じレベルでアノテーションを使用して空の関数を定義できます。元のコード構造を維持することもできます。これにより、エディターでオートコンプリートが有効になります。さらに、ライブラリ用に自動生成されたドキュメントを入手できます

例:

/**
* Constructor.
* @constructor
* @param {String} apiKey Doxument API key
* @param {String} apiToken Doxument API token
*/    
function DoxumentApi(apiKey, apiToken) {
  // public api
  return {
        get: function(id, params) {
          var httpResponse = execute('/docs/' + id + '.json?' + buildQuery(params));
          return parse(httpResponse);
        }
    }
}

/**
* Get document record.
* @param {String} id document id
* @param {Object=} params optional. extra get params
* @return {Object} Document object
*/    
function get(id, params) {}
于 2012-08-26T09:50:39.587 に答える
3

ここから機能リクエストを送信できます。

http://code.google.com/p/google-apps-script-issues/issues/list

于 2012-06-05T05:11:21.660 に答える
2

まだ機能していませんが、チームはそれを知っています。それまでは、サイトにライブラリを文書化する必要があります。説明にメソッドを入れることもできると思います。それは本当に新しいサービスの素晴らしいスタートですが、私はあなたと一緒に約5分で、すでにもっと欲しいと思っていました。;)

于 2012-06-05T23:33:29.270 に答える
0

OOの使用についてはどうですか?

非常によく整理されているように見え、文書化も簡単です。

/**
 * A stopwatch Class.
 *
 * @constructor
 */
function Stopwatch() {
  this.current =  new Date().getTime();
}

/**
 * Starts the stopwatch
 */
Stopwatch.prototype.start = function(){
  this.current = new Date().getTime();
};

/**
 * Stops the stopwatch
 *
 * @return {number} Number of seconds since Stopwatch was started
 */
Stopwatch.prototype.stop = function(){
  return ((new Date().getTime()) - this.current) / 1000;
};

例。ライブラリが としてインポートされた場合Utils

var s = new Utils.Stopwatch();
s.start();

// (...) 

Logger.log(s.stop());

PS: これはテストされていないコードです。

副作用として、複数のストップウォッチを持つことができ、それぞれが独自のローカル変数を維持しますcurrent

アップデート

これは JSDoc に従って正しく文書化されていますが、現在、Google Apps Script でメソッドをオートコンプリートしません。

于 2012-06-05T07:18:20.753 に答える