Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 15.04.2014, 08:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Я лично против "кода в строке", в любом его виде. Попахивает.

И так для вас ввели:
Пример: JavaScript 1.8
alert( (function(x,y)x+y)(1,2) );
что ещё надо то?)
__________________
29375, 35

Последний раз редактировалось Aetae, 15.04.2014 в 08:37.
Ответить с цитированием
  #22 (permalink)  
Старый 15.04.2014, 09:24
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Aetae Посмотреть сообщение
Я лично против "кода в строке", в любом его виде. Попахивает.

И так для вас ввели:
Пример: JavaScript 1.8
alert( (function(x,y)x+y)(1,2) );
что ещё надо то?)
alert(((x, y) => x + y)(1, 2));


Правд нативно это тока в ФФ, но я уже больше года юзаю трансляторы и всё не нарадуюсь
__________________
kobezzza
code monkey
Ответить с цитированием
  #23 (permalink)  
Старый 15.04.2014, 09:33
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от DjDiablo Посмотреть сообщение
Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло).
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее.

function F(args, body) {
    F.cache=F.cache||{};
    F.cache[args+body]=F.cache[args+body]||new Function(args, "return " + body);
    return F.cache[args+body];
}
      
alert(F("x,y","x+y")(1, 2));
Есть кейсы где оправдан, но твой пример не учитывает слишком много нюансов.

В своём Collection я уже давно ввёл поддержку строковых сокращений для фильтров в дополнение к простым функциям:

$C([1,2,3]).get(':el > 2');


Или же:

$C().addFilter({
    'filter1': function () {},
    'filter2': function () {},
    'filter3': function () {},
    'filter4': 'filter3 || filter2'
});

$C([1,2,3]).get('filter1 && filter2 || filter4');


Первый вариант на практике оказался очень удобным применительно в шаблонах:
https://github.com/kobezzza/Snakeskin#foreach-1

но в JS с введением Arrow Function от него мало проку.

А вот второй вариант оказался очень удобным и я регулярно его использую.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 15.04.2014 в 09:51.
Ответить с цитированием
  #24 (permalink)  
Старый 16.04.2014, 01:05
Новичок на форуме
Посмотреть профиль Найти все сообщения от Maxmaxmaximus42
 
Регистрация: 16.04.2014
Сообщений: 2

а я юзаю кофесткрипт, меня тим перубедил и он был прав, и даже круглые скобки не ставлю теперь
Ответить с цитированием
  #25 (permalink)  
Старый 30.04.2014, 23:10
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Как смотрите на то, чтобы маркировать тип переменной с помощью меток?
function example1() {
	integer:var index;
	string:var name;
}

function example2() {
	integer:var index;
	integer:var count;
	string:var name;
	string:var value;
}

function example3() {
	integer:var index, count;
	string:var name, value;
}

function example4() {
	integer:var index = 1, count;
	string:var name, value = "none";
}

UglifyJS может автоматически поудалять эти метки, для продакшион версии.
Ответить с цитированием
  #26 (permalink)  
Старый 01.05.2014, 09:34
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Не выдумывай и юзай JSDoc или Dart/TypeScript
__________________
kobezzza
code monkey
Ответить с цитированием
  #27 (permalink)  
Старый 01.05.2014, 13:00
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Сообщение от kobezzza Посмотреть сообщение
Не выдумывай и юзай JSDoc или Dart/TypeScript
Точнее и не скажешь)
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Ответить с цитированием
  #28 (permalink)  
Старый 02.05.2014, 20:53
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от DjDiablo
Не выдумывай
так не интересно ничего не выдумывать

Недавно адаптировал скрипт для работы в браузере, ну и чтобы работало в IE8, убирал из скрипта NFE, например:
document.addEventListener("click", function callback(event) {
     document.removeEventListener("click", callback);
     …
});

нужно переделать в:
function callback(event) {
     document.removeEventListener("click", callback);
     …
}
document.addEventListener("click", callback);
Но это муторно все функции переделывать в FD, иногда имена совпадают, не всегда нужны эти функции в общем скопе и т.д.
arguments.callee использовать нельзя, потому что весь код в strict режиме исполняется в нормальных браузерах.
Можно облегчить себе жизнь, написав функцию, наподобие bind, но выполняющую привязку только для первого аргумента, и в качестве значения этого аргумента должна отправляться ссылка на bound-функцию:
function nfe(targetFunc) {
    function boundFunc() {
        Array.prototype.unshift.call(arguments, boundFunc);
        return targetFunc.apply(this, arguments);
    }
    return boundFunc;
}

Теперь можно делать так:
document.addEventListener("click", nfe(function (callback, event) {
    document.removeEventListener("click", callback);
    …
}));

или так:
setTimeout(nfe(function (onTime) {
    …
    setTimeout(onTime, 100);
}), 100);
Ответить с цитированием
Ответ



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

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