Создание организации, подобной пространству имен, в библиотеке скриптов приложений 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 не выполняются автоматически.