Вход

Просмотр полной версии : Как часто вы используете qq && qq()


Livaanderiamarum
13.01.2012, 17:40
Как часто вы используете qq && qq()
Типа если функция существует, то вызвать))))
куда удобнее чем if'ы

подскажите сахарок который юзаете вы:)

Gozar
13.01.2012, 17:56
Не часто, я стараюсь об этом вообще не задумываться.

Сложно говорить о сахаре в js, при подобном использовании код часто становиться нечитабельным.

Стараюсь не злоупотреблять подобными конструкциями и цепями вызовов, хотя иногда получается цепь длинной в страницу, чаще в строку по 10 функций подряд, эдакая лапша без jq, с jq совсем страшно порой :)

Livaanderiamarum
13.01.2012, 18:04
Не часто, я стараюсь об этом вообще не задумываться.

Сложно говорить о сахаре в js, при подобном использовании код часто становиться нечитабельным.

Стараюсь не злоупотреблять подобными конструкциями и цепями вызовов, хотя иногда получается цепь длинной в страницу, чаще в строку по 10 функций подряд, эдакая лапша без jq, с jq совсем страшно порой :)


А мне почему-то цепочки легче воспринимаются

Gozar
13.01.2012, 18:31
А мне почему-то цепочки легче воспринимаются
Это если логика в них простая, а если входит одно, а выходит другое и логика в цепочке меняется по 10 раз то сложновато уже это воспринимать. Вернее это приходится как-то описывать иначе через пару дней вспомнить точно как идут данные через цепь нереально.

Рассуждения абстракты, поэтому не имеют особого смысла без примеров, а мне сейчас лень приводить пример.

Gozar
13.01.2012, 18:40
Придумал пример: берешь минимизированную версию jq и пытаешься её привести в читабельный вид, чтобы было понятно что и за что отвечает.
Если в течении недели приведешь её хотя бы в более менее внятный вид, то считай что я заблуждаюсь. Хотя я думаю и месяца будет мало.

Aetae
13.01.2012, 19:28
По теме: в данном конкретном случе предпочитаю использовать if, но например если нужно присвоить результат то куда удобнее: a=qq&&qq();
P.S. Это нифига не сахарок, с таким подходом сахаром можно обозвать всё что угодно кроме asm.

monolithed
13.01.2012, 19:47
всё что угодно кроме asm.
В С/С++ такое тоже не прокатит :)

poorking
13.01.2012, 20:03
Согласен с Gozar, лучше таким не злоупотреблять. Я вот всегда делаю упор на читабельность (конечно, не в проигрыш производительности). Даже когда после if (condition) идет одна инструкция, я всегда открываю фигурные скобки
if (typeof cache[id] !== "undefined") {
return cache[id];
}
То же относится и к циклам, просто вымораживает такой код

for (var i = 0, l = array.length; i < l; i ++) while (i --) doSomething()


но не такой

for (var i = 0, l = array.length; i < l; i ++) {
while (i --) {
doSomething();
}
}


А вот такими
a && array.push(a) делами пусть занимается минификатор, он так и делает

nerv_
13.01.2012, 20:40
Я вот всегда делаю упор на читабельность
Кажется, я начинаю Вас понимать :)

Livaanderiamarum
13.01.2012, 20:49
Кажется, я начинаю Вас понимать :)

Кается я начинаю всегда внимательно делать чтение упора понимания)))

FINoM
14.01.2012, 00:36
Вполне нормальная практика, ничем не мешающая читабельности. И это не единственное применение aa && bb:
animatable && $( el ).animate({
...
});

log = function( text ){
console && console.log( text );
}
Что здесь непонятного, я не знаю.

trikadin
14.01.2012, 00:44
А вот я не брезгую func && func(). Всё равно для всех читабельно не сделаешь. А тот кто знает - поймёт.

Livaanderiamarum
14.01.2012, 00:53
Что здесь непонятного, я не знаю.
Нубы путаются

FINoM
14.01.2012, 00:54
А тот кто знает - поймёт.Во-во.

FINoM
14.01.2012, 00:55
Нубы путаютсяИ? Нубы путаются во всём, что не знают.

Livaanderiamarum
14.01.2012, 00:58
И? Нубы путаются во всём, что не знают.

Я и говорю!!! НУБЫ ПУТАЮТСЯ!!

Livaanderiamarum
14.01.2012, 01:01
И?
если у тя проблемы с прослеживанием причиноследственных связей то тебе в кащенко, а не ко мне!

trikadin
14.01.2012, 01:06
Livaanderiamarum, успокойтесь. Новички действительно путаются во всём, чего не знают. Но почему это должно влиять на то, как я пишу код - я не понимаю.

Если я пишу код для новичка - я стараюсь его писать понятно. Если я пишу код, который в будущем разбирать буду либо я, либо программист-не-новичёк - я не вижу причин не использовать данную конструкцию (я не говорю обо всём, что тут приводилось в пример). Она понятна программисту, который хорошо знает JS.

FINoM
14.01.2012, 01:11
Если я пишу код для новичка - я стараюсь его писать понятно.Что значит "понятно"? Где та грань, разделяющая понятный код от непонятного? Может быть, новичёк, разбирающий твой код, не знает, что такое while или var, нужно и под него подстраиваться?

trikadin
14.01.2012, 01:16
Что значит "понятно"? Где та грань, разделяющая понятный код от непонятного?
Использую вместо func && func() что-то типа такого:

if (typeof (func) !== "undefined") { // проверяем, есть ли функция
func(); // если есть - запускаем
};

Может быть, новичёк, разбирающий твой код, не знает, что такое while или var, нужно и под него подстраиваться?
Таким я отправляю RTFM:

"Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел .
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела."

Livaanderiamarum
14.01.2012, 01:18
Livaanderiamarum, успокойтесь. Новички действительно путаются во всём, чего не знают. Но почему это должно влиять на то, как я пишу код - я не понимаю.

Вот и я не понимаю, это новички путаются, почему это на меня должно влиять, я тоже не понимаю. раз новички путаются пусть они и не используют. Я то и говорю! А какие то идиоты мои слова повторяют, перефризаруют и говорят Так, как будто перефразирование моих слов противоречит моим словам.. это нормально?

че то вы вобще неадекватные все седня..

trikadin
14.01.2012, 01:20
Вот и я не понимаю, это новички путаются, почему это на меня должно влиять, я то же не понимаю. раз новички путаются пусть они и не используют.
Определитесь с позицией, штоле.

че ты вы вобще неадекватные все седня..
"Если вокруг пасёт дерьмом - возможно, воняешь ты" (c) Кто-то там, но не я.

Livaanderiamarum
14.01.2012, 01:22
Определитесь с позицией, штоле.
Я её и не менял с самого начала топика О_О возможно кто-то криво её понял???

FINoM
14.01.2012, 01:23
if (typeof (func) !== "undefined") { // проверяем, есть ли функция
 func(); // если есть - запускаем
};
:|
Почему typeof пишется со скобками, что такое !== и зачем это использовать? Вот два нубских вопроса. В случае a && a() количество нубских вопросов === 1 :D

Livaanderiamarum
14.01.2012, 01:23
"Если вокруг пасёт дерьмом - возможно, воняешь ты" (c) Кто-то там, но не я.
в данном случае не подходит потому что я же не могу генерировать текст который генерируете вы.

FINoM
14.01.2012, 01:26
Да и вообще, что за дебильное слово "нуб"? Его придумали компьютерные игроки (точнее, школьники-задроты :D), которые далеки от программирования. Всё, буду стараться его не употреблять.

trikadin
14.01.2012, 01:28
Почему typeof пишется со скобками
Ну оно и без скобок может писаться)

что такое !== и зачем это использовать?
Ссылка (http://javascript.ru/basic/operators#sravnenie).


FINoM, вы собираетесь задавать нубские вопросы и смотреть, как я буду выкручиваться?) Я выкручусь, не сомневайтесь) Но, честно говоря, я не очень понимаю, чего вы добиваетесь.


Я её и не менял с самого начала топика О_О возможно кто-то криво её понял???
Скорее, кто-то, как всегда, плохо формулирует мысли и/или намеренно вводит собеседников в заблуждение. Не буду тыкать пальцем, но это вы.

FINoM
14.01.2012, 01:31
Ну оно и без скобок может писаться)
Ссылка.Эти вопросы задал бы сферический новичек в вакууме, ни в коем случае не пытаюсь заставить выкручиваться, это всего-лишь пример.

trikadin
14.01.2012, 01:33
Ну так я ответил)

На самом деле, всё же зависит от человека, от уровня его адекватности, вежливости. Если проще - то от того, понравится он мне, вызовет желание помогать, или нет. Если да - то я с ним буду возиться, помогать. А если нет - то и пошёл в дупу)

melky
14.01.2012, 01:35
Как часто вы используете qq && qq()

с недавнего времени - никогда.

куда удобнее чем if'ы

дело вкуса. хотя, if'ы намного приятнее читать после прошедших N месяцев. хотя, кому как :)

в принципе, мне приятней читать такое :

if(foo) {
bar();
bar2();
}

нежели такое :

foo && bar(),bar2();

Типа если функция существует, то вызвать))))
типа если в qq находится НЕ "",null,undefined,false,0, то попытаться это вызвать ;)

Livaanderiamarum
14.01.2012, 01:50
типа если в qq находится НЕ "",null,undefined,false,0, то попытаться это вызвать

НЕ ЗНАЮ НИ ОДНОЙ ФУНКЦИИ С ТЕЛОМ "",null,undefined,false,0 ))))


нежели такое :
foo && bar(),bar2();
тут не foo bar bar2, а именно
foo && foo ()? а еще можно делать так

return foo && foo ()

своеобразная проверочка на выполнение))

melky
14.01.2012, 01:52
НЕ ЗНАЮ НИ ОДНОЙ ФУНКЦИИ С ТЕЛОМ "",null,undefined,false,0 ))))
есть примеры того, когда нужно выполнять функцию, если она передана?

Livaanderiamarum
14.01.2012, 01:56
есть примеры того, когда нужно выполнять функцию, если она передана?

/**
* Xранилище картинок, принимает 2 параметра, либо имя картинки, тогда возвращает картинку
* @param {Object} imagesHash ассоциативный массив в стиле {'имяКартинки', 'url'}
* @param {Function} call функция которая вызовется по завершению загрузки ВСЕХ картинок.
* @memberOf images
*/
image = (function() {
// контейнер с картинками
var imagesContainer = {},
// счетчик загруженных картинок
counter = 0,
// требуется загрузить картинок
length = 0,
// калбак
callback;

/**
* @module images
*/
return function(imagesHash, call) {

// если аргумент один вернуть картинку
if (arguments.length == 1)
return imagesContainer[imagesHash];

// если аргумента 2, то добавить картинки
if (arguments.length == 2) {
// зафиксировать калбак
callback = call

for (i in imagesHash) {
var img = new Image()
img.src = imagesHash[i]
// при загрузке картинки
img.onload = function() {
// прибавить счетчик
counter++
// если загружены все картинки вызвать калбак
if (counter === length) {
return callback && callback() //вот то место!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
// засунуть картинку в контейнер
imagesContainer[i] = img
// прибавить длину картинок которых требуется загрузить
length++
}
}
}
})()

melky
14.01.2012, 02:05
хм. ладно, завтра почитаю. завтра экзамен по информатике) автомат 95\100. емаё, уже сегодня!

PS "эти" места можно выделять *!* ... */!*
чтобы выделить строку, поставь *!* на пустой строке, и */!* тоже.

FINoM
14.01.2012, 02:16
типа если в qq находится НЕ "",null,undefined,false,0, то попытаться это вызвать Да, если так предполагается.

Livaanderiamarum
14.01.2012, 02:37
хм. ладно, завтра почитаю. завтра экзамен по информатике) автомат 95\100. емаё, уже сегодня!

PS "эти" места можно выделять *!* ... */!*
чтобы выделить строку, поставь *!* на пустой строке, и */!* тоже.

но это тэг ошибки я не хотел унижать свой код))

Gozar
14.01.2012, 10:38
Мне кажется проблема не столь глобальна, нежели единообразие кода:

if (arguments.length == 1)
return imagesContainer[imagesHash];

if (arguments.length == 2) {
//...
}

Для чего придумали фигурные скобки:
- чтобы не париться, где завершился код по условию
- чтобы не парился интерпретатор, где завершился код по условию

В первом случае при просмотре кода нужна лишняя мысль:
- определить, где закончился код по условию

Во втором случае такая мысль не мешает читать код.

Также при написании кода приходиться выбирать какой стиль использовать в данной ситуации, что нифига не способствует сосредоточенности на выражении мысли через код.

При расширении задачи по условию приходиться добавлять фигурные скобки, иначе - фиг знает как оно будет работать.

Вывод: лень нифига не двигатель прогресса программиста ;)

ps: Новички здесь абсолютно не при чём, это всё понты :)

melky
14.01.2012, 11:14
Gozar, согласен целиком и полностью !

Livaanderiamarum
14.01.2012, 12:50
Gozar, нет дело в том что у меня конструкция if означает проверить на что-то, а конструкция
func && func()
и
return func && func()
означают проверить существование функции, если существует, то вызвать, и вернуть тру или фолс.
тут меньше мыслей чем в if потому что тут все конкретезировано под функции.

и да, новички здесь вообще не при чем, кто то зачем-то про них писать начал)

Gozar
14.01.2012, 13:59
return func && func();

if (func) {
return func();
}
Вариант с if проще для понимания(быстрее) через n количество времени. Дело не в возможностях программиста, а скорее в простоте чтения кода. Я уже писал выше.

Я же не мификатор продумывать наиболее короткий код. Раньше я увлекался подобным в PHP, но в дальнейшем решил отказаться. Форматирование и простота понимания кода позволяют строить легко сложные системы, а также возвращаться в будущем к ним и развивать далее.

В разделе работа часто пишут - Программист умеющий писать понятный код. Я считаю это важнее, нежели строить из себя минификатор.

Gozar
14.01.2012, 14:03
return func && func()
означают проверить существование функции, если существует, то вызвать, и вернуть тру или фолс.
Это подмена понятий, если читать код, то получается:
Вернуть func и вызвать func

, а вот существование func явно не проверяется(не указано).

если пойти дальше и сделать понятнее то получиться:
return (func && func());
а это вообще плохо по читабельности.

Gozar
14.01.2012, 14:06
Одним словом, читай выше для чего придумали фигурные скобки.

Livaanderiamarum
14.01.2012, 14:11
Это подмена понятий, если читать код, то получается:
Вернуть func и вызвать func
http://apachan.net/pic/i1lzmtrn15hc.html

если читать код и НЕ БЫТЬ ТУПЫМ НУБОМ то код читается по приоритетности операторов.


любой более менее сведающий человек понимает такую конструкция как "проверить функцию и вызвать" потому что этой краткой записи 200 лет.
я тебе на твоем языке оьбясню: НАДО ЗАПОМНИТЬ этот приём. тогда твои глазоньки когда будут это видеть то будут понимать что тут. запомнить так же, как ты запомнил фигурные скобки.

monolithed
14.01.2012, 14:31
Очем вы говорите, какая проверка функции (bar && bar())? :-/
var foo = function() {
return bar && bar(); //error: Undefined variable: bar
};

// анализ кода приостановлен!
alert(foo());
alert(1);


Вариант лучше, вернется undefined и анализ кода продолжится:

var foo = function() {
if (typeof bar !== 'undefined')
return bar();
};

alert(foo()); //undefined
alert(1); //1


Если уж хотите использовать этот оператор для проверки функции, то только так (вернется булево значение):


var foo = function() {
return typeof bar !== 'undefined' && bar();
};

alert(foo()); //0
alert(1); //1


Переменная всегда всегда должна быть объявлена или инициализирована:

var i;
alert(i && i);
alert(1);

var i = 0;
alert(i && i);
alert(1);
Иными словами, если переменная не объявлена и используется в к.л. выражении это приводит к ошибке парсинга и дальнейший анализ кода не производится!
Поэтому перед тем как применять оператор && убедитесь, что переменная или функция объявлены и доступны в текущем скопе области видимости.

Livaanderiamarum
14.01.2012, 15:15
вы я смотрю совсем не знаете в каких случаях и когда и ЗАЧЕМ используется эта конструкция))? пишете мне тут очевидныве вещи) хотя сами не понимаете зачем))

Это как пытаться обезьне дать гранату, это как пытаться древнего человека айфоном пользоваться научить, а он будет тебе говорить "айфон плохой! айфон орехи не колоть! а если колоть то ломаться!" - это очевидно!, древний человек)!

:)

Особенно не понял как работает эта конструкция товарищ monolithed)) и я говорю ему: - это очевидно!, древний человек)!

я привел пример где люди используют подобную конструкцию(4 стр) :) я создал топик для того чтобы узнать у кого какие еще подобные сахарные приемчики есть)? То что вы этот не знали, это хрен с ним) не умеете пользоваться не пользуйтесь, хватит её обсуждать тогда) и своё её не понимание. Создайте отдельную тему для этого)!

Какие кто еще приемы интересные знает?

Gozar
14.01.2012, 15:20
Переменная всегда всегда должна быть объявлена или инициализирована

Ну мы обсуждали код всеумного и почитаемого в интернетах товарища, у него она выше объявлена:

var imagesContainer = {},
// ...
callback;
Так что проблемы не вижу в этом, по умолчанию она у него undefined, затем он ей присваивает повторно значение undefined уже явно или функцию.

Так что вроде мы о том говорим.

Но так как товарищ кинулся обзывать всех нубами, то не вижу причины продолжать обсуждение.

Gozar
14.01.2012, 15:30
То что вы этот не знали, это хрен с ним) не умеете пользоваться не пользуйтесь, хватит её обсуждать тогда) и своё её не понимание.
Ох ты мой хороший, наверное ты написал целых 500 строчек кода и эта конструкция спасала тебя и помогала всегда. Ты настолько опупел, что это так круто - сидеть и раскладывать приоритетность операторов вместо продумывания основного дизайна приложения, его строения и расширяемости, что решил обосрать всех кто так не делает, по любой причине.

Какой ты молодец. Может тебе ноги начать целовать?

Gozar
14.01.2012, 15:31
Какие кто еще приемы интересные знает?
Я знаю один прием, кия, - иди в жопу!

Livaanderiamarum
14.01.2012, 15:39
http://cs9972.vk.com/u11538055/-14/m_78d7e9c0.jpg

Gozar
14.01.2012, 15:49
http://cs9972.vk.com/u11538055/-14/m_78d7e9c0.jpg
Простите Джим, не узнал вас сразу, а то был бы более вежлив.
Не соизволите ли пройти через сфинктор в анус, дабы не упираться рогами в жопу.

monolithed
14.01.2012, 15:53
Ну мы обсуждали код всеумного и почитаемого в интернетах товарища, у него она выше объявлена:
Не обратил на эту портянку внимание.
Просто я видел в некоторых библиотеках такую проверку на наличие колбека, что просто п*ц.


То что вы этот не знали, это хрен с ним
:lol:
Особенно не понял как работает эта конструкция товарищ monolithed)) и я говорю ему: - это очевидно!, древний человек)!
Продолжить традицию бана на день за троллинг и оскорбление?

Livaanderiamarum
14.01.2012, 15:55
как я тебя оскорбил?

Gozar
14.01.2012, 15:56
как я тебя оскорбил?
А я что уже не в счёт?!

:cray:

monolithed
14.01.2012, 15:58
как я тебя оскорбил?
Все твои посты пропитаны оскорблением других участников

Livaanderiamarum
14.01.2012, 16:03
Твои посты все пропитаны оскорблением других участников

А, ну тогда больше не буду. Как мне поступать если ко мне начнут поступать посты пропитаные оскорблениями от других учстников? Посылать посты пропитаные ненавистью в ответ или как то иначе?

monolithed
14.01.2012, 16:13
Как мне поступать если ко мне начнут поступать посты пропитаные оскорблениями от других учстников?
Не создавать каждые пять минут новую тему с очевидным ответом и тем более не оскорблять тех кто тебе помогает.
Посылать посты пропитаные ненавистью в ответ или как то иначе?
Тихо-молча игнорировать и не создавать условий для троллинга

FINoM
14.01.2012, 16:21
Очем вы говорите, какая проверка функции (bar && bar())?

var foo = function() {
    return bar && bar(); //error: Undefined variable: bar
};
Предполагается, что bar объявлен. Например:
function( callback ) {
callback && callback();
}

monolithed
14.01.2012, 16:24
Предполагается, что bar объявлен.
Не обратил на эту портянку внимание.
В любом случае это не очевидно, тем более если объявление где-то в дебрях.

FINoM
14.01.2012, 16:43
В любом случае это не очевидно, тем более если объявление где-то в дебрях.Я бы сразу понял, что к чему.

Gozar
14.01.2012, 16:59
Я бы сразу понял, что к чему.

Ну не знаю, может ТС прав и нужно всегда писать так:

selector = ( ret.cacheable ? $.clone(ret.fragment) : ret.fragment ).childNodes

return elem.nodeType === 1 && elem.getAttribute("id") === match;
Но мне почему-то так писать не всегда хочется.