Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как часто вы используете qq && qq() (https://javascript.ru/forum/misc/24774-kak-chasto-vy-ispolzuete-qq-qq.html)

Livaanderiamarum 13.01.2012 17:40

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

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

Gozar 13.01.2012 17:56

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

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

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

Livaanderiamarum 13.01.2012 18:04

Цитата:

Сообщение от Gozar (Сообщение 150192)
Не часто, я стараюсь об этом вообще не задумываться.

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

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


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

Gozar 13.01.2012 18:31

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150198)
А мне почему-то цепочки легче воспринимаются

Это если логика в них простая, а если входит одно, а выходит другое и логика в цепочке меняется по 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

Цитата:

Сообщение от Aetae
всё что угодно кроме 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

Цитата:

Сообщение от poorking
Я вот всегда делаю упор на читабельность

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

Livaanderiamarum 13.01.2012 20:49

Цитата:

Сообщение от nerv_ (Сообщение 150266)
Кажется, я начинаю Вас понимать :)

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

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
Что здесь непонятного, я не знаю.

Нубы путаются

FINoM 14.01.2012 00:54

Цитата:

Сообщение от trikadin
А тот кто знает - поймёт.

Во-во.

FINoM 14.01.2012 00:55

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150354)
Нубы путаются

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

Livaanderiamarum 14.01.2012 00:58

Цитата:

Сообщение от FINoM (Сообщение 150356)
И? Нубы путаются во всём, что не знают.

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

Livaanderiamarum 14.01.2012 01:01

Цитата:

Сообщение от FINoM
И?

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

trikadin 14.01.2012 01:06

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

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

FINoM 14.01.2012 01:11

Цитата:

Сообщение от trikadin
Если я пишу код для новичка - я стараюсь его писать понятно.

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

trikadin 14.01.2012 01:16

Цитата:

Сообщение от FINoM
Что значит "понятно"? Где та грань, разделяющая понятный код от непонятного?

Использую вместо func && func() что-то типа такого:

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


Цитата:

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

Таким я отправляю RTFM:

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

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

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

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

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

Livaanderiamarum 14.01.2012 01:18

Цитата:

Сообщение от trikadin (Сообщение 150363)
Livaanderiamarum, успокойтесь. Новички действительно путаются во всём, чего не знают. Но почему это должно влиять на то, как я пишу код - я не понимаю.

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

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

trikadin 14.01.2012 01:20

Цитата:

Сообщение от Livaanderiamarum
Вот и я не понимаю, это новички путаются, почему это на меня должно влиять, я то же не понимаю. раз новички путаются пусть они и не используют.

Определитесь с позицией, штоле.

Цитата:

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

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

Livaanderiamarum 14.01.2012 01:22

Цитата:

Сообщение от trikadin
Определитесь с позицией, штоле.

Я её и не менял с самого начала топика О_О возможно кто-то криво её понял???

FINoM 14.01.2012 01:23

Цитата:

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

:|
Почему typeof пишется со скобками, что такое !== и зачем это использовать? Вот два нубских вопроса. В случае a && a() количество нубских вопросов === 1 :D

Livaanderiamarum 14.01.2012 01:23

Цитата:

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

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

FINoM 14.01.2012 01:26

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

trikadin 14.01.2012 01:28

Цитата:

Сообщение от FINoM
Почему typeof пишется со скобками

Ну оно и без скобок может писаться)

Цитата:

Сообщение от FINoM
что такое !== и зачем это использовать?

Ссылка.


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

Цитата:

Сообщение от Livaanderiamarum
Я её и не менял с самого начала топика О_О возможно кто-то криво её понял???

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

FINoM 14.01.2012 01:31

Цитата:

Сообщение от trikadin
Ну оно и без скобок может писаться)

Цитата:

Сообщение от trikadin
Ссылка.

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

trikadin 14.01.2012 01:33

Ну так я ответил)

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

melky 14.01.2012 01:35

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150184)
Как часто вы используете qq && qq()

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

Сообщение от Livaanderiamarum (Сообщение 150184)
куда удобнее чем if'ы

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

в принципе, мне приятней читать такое :
if(foo) {
    bar();
    bar2();
}

нежели такое :
foo && bar(),bar2();

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150184)
Типа если функция существует, то вызвать))))

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

Livaanderiamarum 14.01.2012 01:50

Цитата:

Сообщение от melky
типа если в qq находится НЕ "",null,undefined,false,0, то попытаться это вызвать

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


Цитата:

Сообщение от melky
нежели такое :
foo && bar(),bar2();

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

return foo && foo ()

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

melky 14.01.2012 01:52

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150387)
НЕ ЗНАЮ НИ ОДНОЙ ФУНКЦИИ С ТЕЛОМ "",null,undefined,false,0 ))))

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

Livaanderiamarum 14.01.2012 01:56

Цитата:

Сообщение от melky (Сообщение 150388)
есть примеры того, когда нужно выполнять функцию, если она передана?

/**
 * 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

Цитата:

Сообщение от melky
типа если в qq находится НЕ "",null,undefined,false,0, то попытаться это вызвать

Да, если так предполагается.

Livaanderiamarum 14.01.2012 02:37

Цитата:

Сообщение от melky (Сообщение 150394)
хм. ладно, завтра почитаю. завтра экзамен по информатике) автомат 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, но в дальнейшем решил отказаться. Форматирование и простота понимания кода позволяют строить легко сложные системы, а также возвращаться в будущем к ним и развивать далее.

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


Часовой пояс GMT +3, время: 17:24.