Создание организации, подобной пространству имен, в библиотеке скриптов приложений Google

Я смотрел на создание набора инструментов, используя скрипт Google Apps. Проблема в том, что, насколько я могу судить, допускается только один уровень организации. Вы можете создать библиотеку с именем Stopwatch и вызывать методы Stopwatch.start() и Stopwatch.stop(), что довольно здорово.

Хотя я имел в виду что-то более похожее на Utils.Stopwatch(). Start (), Utils.Timer.start() и т. Д. Я думаю, что это, безусловно, возможно в javascript, но для того, чтобы продолжать нарушать функцию автозаполнения скрипта Apps, нужно быть добавлены в определенном формате. Ниже приведен пример неправильной работы (выдает ошибку), но, возможно, экономит время. Это основано на этой статье.

/**
* 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 ответа

Пока такая функциональность не будет изначально поддерживаться Google, вы можете определять пустые функции с аннотациями на том же уровне, что и ваша функция конструктора. Вы даже можете сохранить исходную структуру кода. Это включит автозаполнение в редакторе. Кроме того, вы получите автоматически сгенерированную документацию для своей библиотеки, например https://script.google.com/macros/library/versions/d/YOUR_PROJECT_KEY

Пример:

/**
* 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) {}

Вы можете отправить запрос на функцию здесь:

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

Это пока не работает, но команда знает об этом. До этого вам нужно будет документировать свои библиотеки на сайте. Я думаю, вы могли бы также поместить методы в описании. Это действительно хорошее начало для нового сервиса, но я был с вами около 5 минут и уже хотел большего.;)

Как насчет использования ОО?

Это выглядит очень хорошо организованным, и это легко документировать.

/**
 * 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 не выполняются автоматически.

Другие вопросы по тегам