Pull to refresh

Comments 73

Нет, скорее всего просто студенты на практике. =) А вообще российская крупная компания.
Вооще странно, что человек знает сокращенную запись оператора условия, но не воспользовался простой инверсией. Ну что ж, у всех бывает :)
А если не секрет, какая компания :) ?
Я там недавно, и пока боюсь, что секрет. :) Постарайтесь меня понять.
UFO just landed and posted this here
а как еще в одну строчку инвертировать булеву переменную?
Я ничуть не оправдываю вышеприведенный код, но что будет если до инверсии xthtp ! obj_.checked будет undefined?
Будет эксцепшн. :) Ну а в данной конкретной реализации там на 2 строки выше была проверка на существование obj_, а если объект существует - то это свойство в этой конкретной реализации обязательно задано, это же JS :)
У чекбокса при снятом флажке свойство checked выставляется в undefined, а совсем не в false, как все ожидают. Сам с этим однажды столкнулся, и дебажил потом алертами.
Для тех кто не пользуются FF, DragonFly тоже есть ;)
Но для быстроты можно и алертами :)
Когда нет возможности использовать альтернативный браузер, то приходится алертами. :) Ощутил на собственном опыте, с `той` системой, где работаю я - из браузеров не работает ничего, кроме осла. Ибо особенность единой авторизации.
Корпоративный проект, раскрывать подробности не имею возможности, моя роль там не так велика. А причина пригодности только одного браузера, если простым языком - единая авторизация в базе данных приложения и системе (информация доступна через веб интерфейс после успешного входа в систему, что-то типа NTLM там)
Ну про NTLM-то я в курсе, и проверку Kerberos, встроенные в операционную систему. Мы сами это используем, создавая решения для MS Office SharePoint Server (а там вообще только с IE можно нормально работать).
Я просто думал, что для других браузеров тоже можно настроить.
Конечно, скорее всего можно. При таких то возможностях в браузеров для плагинов. Но есть еще такое понятие как "корпоративный стандарт".
Совершенно спокойно работаю с MS SP service 3.0 через фаирфокс. About:config - network.automatic-ntlm-auth.trusted-uris вписываете урл до главного узла и все.
Тоже доводилось дебажить JS по IE, пользовался Microsoft Script Editor (MSE), кажется входит в состав мс офиса.
блин точно - че то протупил )
кажись нашелся автор кода :))
это не так уж далеко от истины - оператор !! приводит любой объект к булеву типу. Так что вышло очень даже в стиле языка со статической типизацией.
А вы думаете я "от балды" это написал? :)
да и я смайл забыл поставить ;)
Удивительно, но оператор ! тоже приводит всё к булеву типу. :)
как эмоционально а = !!!!!!!!!а;
Никогда не понимал, почему минусуют безобидные вопросы.
Все-таки нельзя же сказать, что этот комментарий именно плохой?
А так человек в следующий раз побоится сказать что он что-то не знает.
Ведь это так ценно, когда люди открыто говорят, что они что-то не знают, особенно в нашей отрасли!
Абсолютно согласен! Вам плюс в карму (а за комментарии кончились плюсы уже =) ), а dab512 плюс - за "моральный ущерб" =)
У всех бывают "тупняки". И раньше все чего-то не знали! И никогда не стесняйтесь задавать вопросы! Это нормально чего-то не знать! А только за желание что-то узнать уже можно уважать!
А минусуют в паблике - добро пожаловать в почту, даже лично к себе приглашаю, еще никогда не отказывал в совете! И надеюсь мало кто откажет при личном обращении. Совет это не затратно и не трудно для помогающего. Взаимопомощь это то, что помогает выжить в современном мире, и по крайней мере странно этого не понимать. Удачи ;)
Такой код не редкость. Пишется он обычно в 4-5 утра под подсказку дружной компании: мышки, кофе и скрепки из ворда
Бывает...
Как говорят футболисты премьер-лиги, когда заху...т мяч на трибуну: "У мастеров бывает, у чайников - норма"
я такое вот встречал в сторонних коммерческих скриптах.

window.location.href='javascript:history.back()'
Ну зачем сразу критиковать? Не я писал ;), но код вполне мог быть сгенереным. В таком случае даже респект программеру, который выкрутился и в поле HREF в дизайнере указал javascript:history.back()... (Например)
НА самом деле часто бывает. И я на подобные штуки попадался. Это когда простейшим задачкам находишь почемуто сложные решения. Вообщем спать нужно больше.
Когда голова не соображает хорошо если код в итоге рабочий получится. А вылизать можно в следующем билде. Кстати интересно как по скорости различаются варианты с инверсией и без неё?
Думаю при инверсии быстрее. Ибо проверка условия - это сравнение значений.
вполне жизнеспособный код и, что важно, удобочитаемый
Ну на счет удобочитаемости Вы загнули...

obj_.checked=(obj_.checked==true)?false:true;
obj_.checked=(obj_.checked==false)?false:true;
obj_.checked=(obj_.checked==true)?true:false;

В какой строчке была инверсия? А, может, их две?
инверсия только в первой =)
это ж тест на внимательность!
Не так уж все и страшно... Код не лишний, просто неоптимальный.
На самом деле ничего смешного в коде нет.

Сам лично написал примерно то же самое около месяца назаж, помучившись минут 10 из-за того что поведение было совсем не таким, как планировалось. В итоге оставил для себя же (маловероятно что в тот код кто-то другой полезет править) небольшой камент:

// need this because when unchecked attr gives undefined value instead of false
var checked = $(this).attr('checked') == true ? true : false;
Я писал о чем то подобном в http://habrahabr.ru/blog/code_wtf/47054.html#comment1010291
Именно из за того что JScript строго себя ведет при операциях с undefined значениями и приходится иногда так извращаться, усложняя логику программы. С другой стороны подобный контроль неявных инициализаций оберегает от возможных ошибок.
А разве такой способ не обходит проблемы с undefined

var checked = $(this).attr('checked') ? true : false;
Можно использовать двойную инверсию !!value
Спасибо, не додумался.
var checked = $(this).attr('checked') == true;

достаточно такого... оператор == возвращает bool.
зато после выполнения кода переменная гарантированно проинициализированна
Да йопт, это вы еще не видели заголовочные файлы от гцц.
Там перлы просто. Перлы.
#define true true
Это очень разумная строчка, кстати. Защищает от умников, обиженных на компанию со строками
#define true false
#define false true
Ребята, я конечно все понимаю, но скажите мне, зачем срать в карму? Рейтинг статьи растет вверх, а карма падает. А ведь хотел просто поделиться с вами интересной по моему мнению информацией, и при этом вроде бы не задел ни чьих интересов. Разочарован. Реально после такой реакции 10 раз подумаешь перед тем как куда-то что-то писать. :(
Ага, странный эффект. Постоянно всплывает.
Up.
вобщем-то думать надо перед написанием статьи, а не после..
подумал-бы - глядишь, и промолчал. и карма в целости, и ничего в топ не всплывает.
Я с вами согласен, но "парадокс" (впрочем довольно частый) именно в том, что рейтинг статьи и карма "растут" в разные стороны. Если бы они изменялись сонаправлено - у меня бы не возникало таких вопросов - все было бы сразу понятно, или инфа - говно (все в минусе) или всем понравилось (все в плюсе). И не было бы подобных вот постов с моей стороны.
Довольно часто встречаю у новичков подобную конструкцию. Это проходит с возрастом... должно пройти)
UFO just landed and posted this here
UFO just landed and posted this here
иногда написать лучше длиннее, но надежнее. В этом случае у нас вконце точно получится либо true либо false, никаких null и undefined. Насчет !a я не уверен, undefined не получится?
Не получится. a = !a — это самое правильное решение в данном случае.
Обсуждалось уже выше. В случае если "a" было undefined (а для свойства checked у объекта checkbox это может быть легко) то !a вызовет эксепшн.
Да, что вы говорите! А вы попробуйте :) Если а в принципе определена как переменная никакого exception не будет. Учите матчасть. ;)
ну вобщем видите - вызвало сомнения у нас новичков, а писать лучше так, что сомнений нет. Не исключаю бы что и сам так написал в 5 утра. Осуждать лучше кривые алгоритмы, а такие штуки - плохой стиль, говнокод, но на работу-то и на скорость даже не особо влияет.

ps еще бывают генераторы кода, я себе стандартную половину программы на php обычно генерирую. Получается совсем не идеально, но быстро.
Сходу в тестовом примере (простая статичная форма, IE 6, FF 2.0.0.16, Opera 9.24) добиться undefined действительно не получилось, но по опыту помню что в некоторых случаях это вполне возможно. В любом случае как говорил мой препод по ТРПО (теории разработки программного обеспечения) - "сохраняйся и предохраняйся". Лично я стараюсь никогда не делать действий над объектами - элементами формы, предварительно не проверив их.
В данном случае оригинальный код это не a = !a, а a.checked = !a.checked; Данный код может вызвать exception только если а == undefined. Но тогда и обсуждать нечего. Проблема будет ещё в левой части. Хочется bulletproof решения?
a && (a.checked = !a.checked);
Удачи.
бывает, что не можешь вспомнить какое-нибудь очень простое слово по-английски. Вот и с очевидными решениями так. Видимо кодил начинающий и в тот день был явно не в духе.
Sign up to leave a comment.

Articles