Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет quappa ([info]quappa)
@ 2007-03-13 15:20:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Вакансия
Нашим замечательным Фуксам требуется человек, который знает, на каком языке написан вот такой код, зачем он написан именно так и в чём разница между любимым и популярным браузерами.
$ = get_node = !document.getElementById
    ? function (e) { return typeof e === 'string' ? undefined : e }
    : function (e) {
        if (typeof e === 'string') {
            return document.getElementById(e);
        } else {
            return e;
        }
    }
;
Условия обычные — гигантская зарплата, никаких дедлайнов, блэкджек и шлюхи. Писать Дмитрию Краминову <dkraminov@накарте.ру>.


(Добавить комментарий)


[info]filonov@lj
2007-03-13 09:34 (ссылка)
Это фантастика

(Ответить) (Ветвь дискуссии)


[info]yevgeny_pi@lj
2007-03-13 10:02 (ссылка)
нет! это жаба скрипт

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]filonov@lj
2007-03-13 10:04 (ссылка)
Я про дедлайны и зарплату. То шо это жабий скрип я предпочитаю не знать

(Ответить) (Уровень выше)


[info]gridycat@lj
2007-03-14 03:07 (ссылка)
С тремя равно?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-03-14 06:31 (ссылка)
А то.

(Ответить) (Уровень выше)


[info]16051976@lj
2007-03-13 09:50 (ссылка)
Пардон май френч, это не жаваскрипт?

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-03-13 10:46 (ссылка)
Пардон май жаваскрипт :)

(Ответить) (Уровень выше)


[info]yevgeny_pi@lj
2007-03-13 10:03 (ссылка)
все таки код на перле выглядит лучше...

(Ответить) (Ветвь дискуссии)

кстати, о перле
[info]jerom@lj
2007-03-13 10:27 (ссылка)
О, а нет ли чего подсказать по поводу моего сниппета: http://community.livejournal.com/ru_perl/154645.html

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: кстати, о перле
[info]quappa@lj
2007-03-13 12:11 (ссылка)
Я там ответил :)
Минус ~20 символов.

(Ответить) (Уровень выше)


[info]filonov@lj
2007-03-13 10:33 (ссылка)
А код не на перле - еще лучше.

(Ответить) (Уровень выше)


[info]quappa@lj
2007-03-13 10:49 (ссылка)
Красота -- в глазах смотрящего.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_arty@lj
2007-03-13 18:09 (ссылка)
а я вот код так же форматирую : )

(Ответить) (Уровень выше)


[info]jerom@lj
2007-03-13 10:30 (ссылка)
Нет уж, лучше не знать языков с конструкциями document.getElementById( 'friendList' ).parentNode.removeChild( document.getElementById( 'friendList' ) );

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-03-13 10:47 (ссылка)
Яваскрипт -- прекрасный язык.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_1313@lj
2007-03-13 11:51 (ссылка)
+1

(Ответить) (Уровень выше)


[info]ike_novodvorsky@lj
2007-03-13 11:36 (ссылка)
Попробую разгадать из спортивного интереса:

Если браузер НЕ поддерживает document.getElementById
то возвращаем true если тип элемента (e) строка, в противном случае возвращаем undefined
Если браузер поддерживает document.getElementById
то если тип элемента строка, возвращаем элемент найденный по идентификатору, коим является e
в противном случае возвращаем e

Если говорить о логике, по человечески -- то мы делаем проверку, и если браузер не поддерживает document.getElementById возвращаем (скорее всего передаем другой функции) true в том случае если в качестве е отправляется строка, в противном случае кидаем undefined, если же поддерживает свойство -- то это либо готовый обьект, либо мы его цепляем getElementById

Такая логика -- для компенсации разницы браузеров.

Написан он так судя по всему для крайней оптимизации, если речь идет о стиле.

Яваскрипт я пишу не так часто и не такой сложный. У меня получилось?

(Ответить) (Ветвь дискуссии)


[info]lomka@lj
2007-03-13 12:11 (ссылка)
не "кидаем", а "возвращаем", слова throw там нет.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ike_novodvorsky@lj
2007-03-13 12:23 (ссылка)
Я имел ввиду что скорее всего подобная функция будет возвращать значение которое будет являться параметром для другой функции.

(Ответить) (Уровень выше)


[info]quappa@lj
2007-03-13 12:47 (ссылка)
Вполне.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ike_novodvorsky@lj
2007-03-13 13:10 (ссылка)
Я рад. Не зря меня значит кормят.

(Ответить) (Уровень выше)


[info]lomka@lj
2007-03-13 12:07 (ссылка)
1. Интересно, а что это за броузеры в которых нет getElementById ?
Они и есть "любимые" ?

2. По замыслу "разработчика" функция $ должна возвращать
или элемент или "undefined ",
но что будет если написать так : $(1) ?
(я то знаю что , но корректным такой код не назовешь)

3. Кстати, видно, что код не проверялся в "любимых",
иначе слово undefined стояло бы в кавычках.

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

(Ответить) (Ветвь дискуссии)


[info]ike_novodvorsky@lj
2007-03-13 12:25 (ссылка)
3. http://www.w3schools.com/jsref/jsref_undefined.asp -- так что корректно


(Ответить) (Уровень выше)


[info]ike_novodvorsky@lj
2007-03-13 12:27 (ссылка)
1. IE 5.5

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-03-13 12:54 (ссылка)
Не, в 5.5 и даже в 5.0 уже работает.
Это MSIE <5, Opera <7, Netscape <6.

(Ответить) (Уровень выше)


[info]quappa@lj
2007-03-13 12:42 (ссылка)
1. Таких браузеров полно, сотни тысяч хитов в месяц. Нет, как правило, у разработчиков они не являются любимыми.
2. Принимается как багрепорт :)
3. Слово undefined в кавычках это строка, а без кавычек -- имя неинициализированной глобальной переменной.
4. Неа, но рассуждения подобные вашим безусловно приветствуются на собеседовании :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]lomka@lj
2007-03-13 15:14 (ссылка)
1. они составляют единицы или десятые доли процента, которыми вполне можно пренебречь, также как и теми, у кого нет подключения к интернету

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

представьте ситуацию -
!document.getElementById && (typeof udefined=="undefined")

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-03-13 15:49 (ссылка)
Привычка считать таких пользователей процентами дурная. Их тысячи, и подавляющее большинство из них не имеют возможности апгрейда.

В новых браузерах она существует всегда и является частью языка, а для старых её принято заводить строчкой "var undefined;".
Ситуация плановая, нам как раз и нужно значение, typeof от которого будет строкой "undefined".

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]lomka@lj
2007-03-14 04:21 (ссылка)
В новых браузерах она существует всегда ?
- Вот прямо сейчас пишу в адресную строку :

javascript: alert(typeof undefined=="undefined")
жму enter - получаю результат true.

Или FireFox 2.0 - старый броузер ?

2. ... а для старых её принято заводить строчкой "var undefined;".

Хорошо, предположим Вы описались и перепутали слова "новых" и "старых".
Тогда в новом FireFox 2.0 :
var undefined;
alert(typeof xxx==undefined) - получаем false.

3. дело конечно ваше, но если функция называется get_node
(хотя правильнее было бы написать getNode),
то мы вправе ожидать от нее, что она возвратит
или сам node или null или, на худой конец, бросит исключение.

Конечно, физически значением node - может быть строка "undefined",
но выглядит это как-то не очень "прозрачно".

Не могли бы Вы прояснить этот момент ?
Я понимаю, что это секретно(2й вопрос),
но, хотя бы, после того как заполните вакансию.








(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-03-14 06:56 (ссылка)
Ничего секретного тут нет, мой пост -- всего лишь реклама вакансии. Это не задание кандидату.

У нас с вами возникло мощное непонимание. Цель кода -- вернуть элемент, либо неопределённое значение.

1. Всё так и должно быть. Мы и хотим вернуть неопределённое значение, а вовсе не строку "undefined".
2. Нет, не описался и всё так и должно быть :) "var undefined" заводит переменную с неопределённым значением. typeof undefined == "undefined".
3. null и undefined -- это функционально одно и то же за исключением удивительного факта, что typeof null == "object". В этом коде undefined используется так, как NULL в C, 0 в C++ и undef в Перле.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Вот я упорол косяк !
[info]lomka@lj
2007-03-14 12:22 (ссылка)
Ок, спасибо за разъяснение - действительно
тут я не прав : "В новых браузерах она существует всегда" == true :).

Никогда ей не пользовался, предпочитая проверку типа,
и соответственно, как-то упустил, что у undefined и тип == "undefined".
Поэтому так "лихо" и проверил: alert(typeof undefined=="undefined") :).

Про типы null и undefined - тоже очень познавательно
- за это отдельное спасибо.

С учетом этого - у такого кода получается
интересная функциональность :
возвращаемый результат можно проверить, и
if(node) - используем его,
а если нет - можно узнать почему:
if(typeof node =="undefined") - значит не тот броузер,
а если null - значит не определен элемент с таким id.

Как-то мне раньше не приходила в голову
идея возможности такой "игры" на разницах типов.
думал: undefined==null, и нечего тут больше проверять :))).
Гран, гран мерси .

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: Вот я упорол косяк !
[info]quappa@lj
2007-03-15 08:30 (ссылка)
Я вот не уверен, что это фича, а не баг -- про тип null.
Но пользоваться пока можно :)

(Ответить) (Уровень выше)


[info]quappa@lj
2007-03-14 07:05 (ссылка)
Можете назвать причины, по которым правильней писать getNode?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]lomka@lj
2007-03-14 10:18 (ссылка)
поскольку это соответствует "Naming Conventions" :
http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html#367
http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book111

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-03-14 11:26 (ссылка)
А по существу?

Подобных конвенций существует очень много и весьма противоречивых.

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

(Ответить) (Уровень выше) (Ветвь дискуссии)

по существу
[info]lomka@lj
2007-03-14 12:53 (ссылка)
я согласен, сам пишу так когда нужно, (правда не в именах функций).

А вообще нужно соблюдать конвенции минимум по 2 причинам:
во-первых:
они обеспечивают возможность машинного анализа и генерации имен кода,

а во вторых: именно в JavaScript и именно Java - конвенции -

чтобы не было коллизий при "скрещивании" с Java технологиями. Например, если в базе данных поле называется
order_id, и вы станете генерить бины Hibernate Tool' ом ,
то он преобразует это имя к имени поля в переменной
как orderId.
Если вы затем используете эти бины в каком - нибудь веб-ремоутном
тулките, (не важно на json или xml), то он передаст это имя,
как оно есть, без изменений в объект JavaScript,
и там соответственно, будет поле с этим именем.

Так что, если кто работает в связке с Java
- тому соблюдение Java-конвенций сильно облегчает жизнь.

(Ответить) (Уровень выше) (Ветвь дискуссии)

Re: по существу
[info]quappa@lj
2007-03-15 08:21 (ссылка)
Вот даже как.

Безусловно, когда правило "регистрования" букв в идентификаторах является частью интерфейса какой-то системы, его придётся соблюдать :) Это примерно как доллар в Перле -- хочешь-не хочешь, а надо.

Слава богу, что я с такими системами не сталкивался. Ява полностью прошла мимо меня.

(Ответить) (Уровень выше)


[info]alexf@lj
2007-03-13 17:20 (ссылка)
Если в обмен на требуемые знания помогут попасть в топ по блекджеку на гугле и там надолго остаться, то согласен. На таких условиях согласен сотрудничать по бартеру, зарплату и шлюх могут оставить себе. :)

(Ответить)


[info]_arty@lj
2007-03-13 18:15 (ссылка)
а, вот значит почему : )
я думал, просто так зовешь : )
ты как-то раньше говорил, что стараетесь спецов на всякий случай брать

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-03-13 18:20 (ссылка)
Имеется шанс продолжить твою череду совпадений :)
Я не то чтобы зову, но ребята попросили.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_arty@lj
2007-03-13 18:36 (ссылка)
я понимаю
если тут у меня обломается, я поговорю с ними : )

(Ответить) (Уровень выше)


[info]mihun@lj
2007-03-14 18:06 (ссылка)
О, батенька, да у вас талант...

/* задумалсо */ а чем же мне менеджеров заманивать?

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-03-15 08:16 (ссылка)
Да, "приходите управлять разработчиками, у которых нет дедлайнов" звучит несколько отпугивающе :))

(Ответить) (Уровень выше)


(Анонимно)
2007-04-15 10:12 (ссылка)
Насколько я помню это кусок из библиотеки Prototype я угадал?

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-04-15 14:22 (ссылка)
Нет, это мой кусок :)

(Ответить) (Уровень выше)


[info]ex_simonov_@lj
2007-05-07 16:34 (ссылка)
Кошмар какой. А всё из-за того, что функция написано хитровывернутым способом :)

Вот такой вариант попроще наверное выглядит и по-понятнее? :)

$=eval("get_node=function (e) { return typeof e === 'string' ? "+( document.getElementById ? "document.getElementById(e)" : "undefined" )+" : e }")

(Ответить) (Ветвь дискуссии)


[info]quappa@lj
2007-05-07 17:43 (ссылка)
Ваш вариант тоже хороший, да.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ex_simonov_@lj
2007-05-08 03:31 (ссылка)
Не хотел Вас обидеть, простите!

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]quappa@lj
2007-05-08 04:41 (ссылка)
Надеюсь, это шутка :)

(Ответить) (Уровень выше)