логические операторы
Доброго времени суток. Есть пара вопросов по логическому оператору &&.
В одной книге по JS прочитал, что при если false && stop() в этом выражении первый аргумент является false, null или undefine, то срабатывает второй оператор, т.е функция stop(). А здесь на сайте в разделе "Логические операторы" написано, что это выражение вернет первый не верный операнд. Подскажите чего я не понимаю? |
В больштнстве языков такая конструкция вернет false всегда, согласно правилам матлогики. Ни к чему проверять второе условие, если первое всегда ложно... их произведение всегда ложь.
ЗЫ. Можете поэксперементировать ;) <script type='text/javascript'> alert(false && function(){return true;}) //вернет false alert(null && function(){return true;}) //вернет null alert(b && function(){return true;}) //ничего не вернет </script> |
alert(b && function(){return true;}) //ничего не вернет а почему в этом примере ничего не вернет? |
Цитата:
false && function(){alert('O_o'); return true}(); alert('Ничего не произошло'); |
т.е получается, что если если первый аргумент false - то он и возвращается, а если оба true, то возвращается последний ?
|
Цитата:
Цитата:
Цитата:
if(false && true){} пройдет? |
Цитата:
Произведение ничего на что-то дает ничего. Значит функция вернет ничего) |
Цитата:
|
:) Я предложил на первом шаге поэкперементировать... В результате эксперимента выдаст ошибку ;)
|
просто интересно
Сей пост дернул за одну мысль.
condition1 && (action1() || 1)//предохраняем от "лжи" ||condition2 &&( subcondition2_1 && (action2_1() || 1) || subcondition2_2 && (action2_2() || 1) )|| condition3 && action3() ||//пусть action3 всегда вернет true action4() Несмотря на некую нездоровость, такое ветвление работает, и были упразднены слова switch, case, if, else. Идея не нова, и, может быть, кто-то здесь так пишет? |
Хочешь сказать, что в итоге объем кода уменьшился?
В любом случае это трудно читать... |
Такой код дает мало возможностей для управления, имхо. Он фактически линеен?
|
Цитата:
Где я такое могу использовать, это для замены одиночных if'ов: foo && bar() И для определение default значений переменных, поскольку в JS нет отличных перловых ||= и //= foo || (foo = '%default%') |
Just interesting, какова сравнительная производительность этих двух подходов?
|
Не знаю, не тестировал, ввиду того, что это экономия на спичках.
|
Цитата:
при написании проектов более трех десятков строк, использование нестандартных конструкции резко ухудшит эти параметры. и если выбирать между медленной, но работающей программой, которую я смогу исправить, и быстрой но не работающей, не меняющейся, не тестируемой и неочевидлной прогой. то раузмеется я выберу первое |
haha, google closure compilier.
|
B@rmaley.e><e,
Это видимо глюк форума? Сообщение из соседней ветки Лучший редактор под ubuntu |
inGray, о чем Вы? Мое сообщение должно находиться именно здесь.
|
B@rmaley.e><e,
:) Оно просто не очень понятное ) Имеете ввиду? Цитата:
Цитата:
|
inGray,
Цитата:
|
Очевидно, никто так не пишет.
Но читабельность, думаю, понятие субъективное. В пору изучения Паскаля подумать о передаче функций как параметров было чем-то невообразимым. Вчитываться в этот функциональный "беспредел" было сложно. А теперь это что-то обыкновенное. Я даже нашел подобное извращение на Паскале. Ну а про запись программы через логические операторы, по мне, это из той же категории. Язык умеет, значит можно. Нужно только приноровиться. Google Closure Compiler не копал, еще не дошел до той стадии джаваскриптерства, когда он нужен. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 15:15. |