Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2014, 12:06
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

GCC - трюки/вопросы
Давайте в этом треде писать вопросы/трюки и т.д. при работе с GCC.

Вопрос:

Как декларировать перегрузку параметров метода при переопределении метода в дочернем объекте.

Решение:

Это конечно хак, но работает:

/** @constructor */
function Foo() {}

/**
 * @param {string} a
 * @param {...?} args
 * @return {string}
 */
Foo.prototype.get = function (a, args) { return ''; }

/**
 * @constructor
 * @extends {Foo}
 */
function Foo2() {}

/**
 * @override
 * @param {number} b
 */
Foo2.prototype.get = function (a, b, e) { return ''; }


Т.е. в родительском классе мы закладываем декларацию о возможном расширении

@param {...?} args


Мб есть более правильный способ?
__________________
kobezzza
code monkey
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2014, 20:44
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

kobezzza, по-моему, всё верно. или я не понял

хм. я вижу, что там обновилась статья о JSDOC внутри GCC.

Что думаете насчёт того, чтобы дополнить статьи на сайте?
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2014, 20:53
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
kobezzza, по-моему, всё верно. или я не понял
Ну это скорее хак, чем нормальное решение

Цитата:
Что думаете насчёт того, чтобы дополнить статьи на сайте?
Имеешь ввиду здесь на javascript.ru?
__________________
kobezzza
code monkey
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2014, 21:04
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от kobezzza
Имеешь ввиду здесь на javascript.ru?
в учебнике.

там какие-то шаблоны типов; структуры - походу из C принесли в GCC. нипанятна
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2014, 22:26
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от melky Посмотреть сообщение
в учебнике.
Почему бы и нет

Сообщение от melky Посмотреть сообщение
там какие-то шаблоны типов; структуры - походу из C принесли в GCC. нипанятна
Скорее из Java - это реализация генериков, но я на практике эти конструкции тоже не юзал.
__________________
kobezzza
code monkey
Ответить с цитированием
  #6 (permalink)  
Старый 23.04.2014, 21:40
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Задал вопрос на трекере GCC:

Overloading parent method

Support of parameter objects
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 23.04.2014 в 22:05.
Ответить с цитированием
  #7 (permalink)  
Старый 11.12.2014, 10:46
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Недавно придумал очень классный трюк, который позволяет декларировать конвертацию типов для GCC.

Заведём функцию ковертор:

/**
 * Вернуть заданный объект с указанием произвольного типа
 * (для приведения типа в GCC)
 *
 * @param {?} val - исходное значение
 * @return {?}
 */
function Any(val) {
	return val;
}


Теперь допустим у нас есть функция:

/**
 * @param {(string|!Array)} idOrParams
 */
function get(idOrParams) {
    if (Array.isArray(idOrParams)) {
        return idOrParams.map(...); // Тут GCC начнёт варнить, мол тип может быть строкой и данный код не безопасен
    }
}


Решение номер 1

Сделаем явную конвертацию данных:

/**
 * @param {(string|!Array)} idOrParams
 */
function get(idOrParams) {
    if (Array.isArray(idOrParams)) {
        return [].concat(idOrParams).map(...);
    }
}


Работает, но выглядит как кривой хак (а вот для конвертаций в примитивы можно спокойно юзать Boolean, String и Number).

Решение номер 2

Использование конвертора Any

/**
 * @param {(string|!Array)} idOrParams
 */
function get(idOrParams) {
    if (Array.isArray(idOrParams)) {
        /** @type {!Array} */
        var myArray = Any(idOrParams);
        return myArray .map(...);
    }
}


Функцию Any GCC грохнет при компиляции и никаких оверхедов не будет, данный трюк можно использовать для любой кновертации данных, также можно наплодить на основе Any ряд функций, навроде: isArray и т.д.
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 11.12.2014, 22:09
Профессор
Посмотреть профиль Найти все сообщения от __он_самый__
 
Регистрация: 22.11.2014
Сообщений: 130

есть ли веские прчины использовать экстримальное сжатие gcc изрщряясь с jsdoc и кодом? сжатие на дополнительных 30 киллобайт вполне компенсируется gzip. или я что то не так говорю? ДАЖЕ СРАНУЮ КАРТИНКУ сожми чуть сильнее, и вот тебе окупилось отсутсивие gcc

Последний раз редактировалось __он_самый__, 11.12.2014 в 22:12.
Ответить с цитированием
  #9 (permalink)  
Старый 11.12.2014, 23:16
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от __он_самый__
есть ли веские прчины использовать экстримальное сжатие gcc изрщряясь с jsdoc и кодом? сжатие на дополнительных 30 киллобайт вполне компенсируется gzip. или я что то не так говорю? ДАЖЕ СРАНУЮ КАРТИНКУ сожми чуть сильнее, и вот тебе окупилось отсутсивие gcc
он вкупе ещё и неплохо меняет форму кода (не просто инлайн функций)

ну а юзать - имхо, UglifyJS2 в руки и нормас. он (углифи) и работает быстрее
Ответить с цитированием
  #10 (permalink)  
Старый 12.12.2014, 00:47
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от __он_самый__ Посмотреть сообщение
есть ли веские прчины использовать экстримальное сжатие gcc изрщряясь с jsdoc и кодом? сжатие на дополнительных 30 киллобайт вполне компенсируется gzip. или я что то не так говорю? ДАЖЕ СРАНУЮ КАРТИНКУ сожми чуть сильнее, и вот тебе окупилось отсутсивие gcc
Ну для мне меня это в первую очередь валидатор и оптимизатор (сжатый код в среднем работает на 20% быстрее). В целом GCC дисциплинирует и пропагандирует написание понятного и быстрого кода.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 12.12.2014 в 00:50.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сборка GCC (Java, ant) Zenitchik Библиотеки/Тулкиты/Фреймворки 0 13.07.2013 14:56