JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 40 41 [42] 43 44 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#616
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ А я уже писал, что такая обработка в браузерах - норма. Они и html не строго обрабатывают, только это не повод вносить кривость в сам html ![]() А никто и не вносит, стандарт вполне четок, на сколько я знаю, другое дело, что ему мало кто следует. Вот этот форум проходит валидацию W3C? Google не проходит, на сколько я знаю. Так и я о том же. Почему же js сам по себе не мог бы быть строгим, просто браузеры бы были более лояльны к коду, так же, как и в случае html? Цитата А что без него? Ну например ![]() ![]() fun f (xs : [Object]) -> Void { for x in xs { x.foo } } Теряем информацию о типе и смысл статической типизации. |
|
Сообщ.
#617
,
|
|
|
|
Цитата Мяут-Настоящий @ Гораздо хуже если из-за какой-нибудь внутренней ошибки клиент увидит неожиданный результат Ну там интернет-банк скажет, что у него на карточке undefined денег.Пральна, лучше сразу кинуть пользователю ошибку Цитата Мяут-Настоящий @ К тому же сообщения об ошибках и ворнинги заставляют более качественно тестировать софт, а не "Ну не заработало и черт с ним" То-то я гляжу исключения прям заставляют себя обрабатывать, и ни в коем случае не позволяют оставлять catch пустым. Добавлено Цитата D_KEY @ Почему же js сам по себе не мог бы быть строгим, просто браузеры бы были более лояльны к коду Браузеров много и заставить их себя как-то вести практически не реально. Язык более-менее один... |
|
Сообщ.
#618
,
|
|
|
|
Цитата Астарот @ Пральна, лучше сразу кинуть пользователю ошибку Астя, как будто-бы на Java или там на Erlang пишут софт не для пользователей, а для каких-то инопланетян. Добавлено Цитата Астарот @ Браузеров много и заставить их себя как-то вести практически не реально. Ну у Python тоже не одна реализация, компиляторов C++ - выше крыши. Вроде все живы |
|
Сообщ.
#619
,
|
|
|
|
Цитата D_KEY @ Цитата А что без него? Ну например ![]() ![]() fun f (xs : [Object]) -> Void { for x in xs { x.foo } } Теряем информацию о типе и смысл статической типизации. Ты уже начал читать про Dependent Types? =) В случае применения функции к статически сформированного списка ничего не теряем, в случае с формированием списка в рантайме шаблоны не помогут =) А смысл статической типизации вы каждый раз теряете при наследовании с переопределением виртуальных методов. |
|
Сообщ.
#620
,
|
|
|
|
Цитата Мяут-Настоящий @ Ну у Python тоже не одна реализация, компиляторов C++ - выше крыши. Вроде все живы ![]() И что? Пока ты не заставишь все браузеры вести себя единообразно - разговор ниочем. Напоминаю - в одном и том же случае ie положит данные в объект глобальной области видимости, а все остальные браузеры передадут в функцию в виде аргумента. Решения пока так никто и не предложил. |
|
Сообщ.
#621
,
|
|
|
|
Цитата Мяут-Настоящий @ Гораздо хуже если из-за какой-нибудь внутренней ошибки клиент увидит неожиданный результат Ну там интернет-банк скажет, что у него на карточке undefined денег.К тому же сообщения об ошибках и ворнинги заставляют более качественно тестировать софт, а не "Ну не заработало и черт с ним" При качественной разработке юнит тесты помогают, в противном случае никакая строгость не поможет избежать логических ошибок =) Добавлено Цитата Мяут-Настоящий @ Ну у Python тоже не одна реализация, компиляторов C++ - выше крыши. Вроде все живы ![]() угу, то-то собирать исполняемый файл из объектников созданных разными компиляторами -- занятие не из веселых. Кстати на ЛОРе как раз отрылась тема. |
|
Сообщ.
#622
,
|
|
|
|
Цитата Астарот @ И что? Пока ты не заставишь все браузеры вести себя единообразно - разговор ниочем. Мне кажется, это замкнутый круг. Вместо того, чтобы использовать единые стандарты и следовать им, придумали язык, в котором можно вообще без стандартизации существовать |
|
Сообщ.
#623
,
|
|
|
|
Цитата Мяут-Настоящий @ Цитата Астарот @ И что? Пока ты не заставишь все браузеры вести себя единообразно - разговор ниочем. Мне кажется, это замкнутый круг. Вместо того, чтобы использовать единые стандарты и следовать им, придумали язык, в котором можно вообще без стандартизации существовать ![]() Тебе может казаться что угодно, на реальность это не влияет никак - js отлично подходит для своей ниши и все попытки "исправить" его обозначают "портить хорошую вещь". Добавлено Так что, Мяут-Настоящий, это Цитата Астарот @ Напоминаю - в одном и том же случае ie положит данные в объект глобальной области видимости, а все остальные браузеры передадут в функцию в виде аргумента. Решения пока так никто и не предложил. проигноришь в лучших традициях? |
|
Сообщ.
#624
,
|
|
|
|
Цитата Мяут-Настоящий @ Мне кажется, это замкнутый круг. Вместо того, чтобы использовать единые стандарты и следовать им, придумали язык, в котором можно вообще без стандартизации существовать ![]() Дык в этом и суть, что есть уже сформировавшаяся "область" со своими минусами и плюсами, и исправить ее просто не реально. Если с завтрашнего дня все браузеры станут строго следовать стандартам html и более строго проверять JS-код, то примерно 99% веба просто перестанут работать. Ты будешь оплачивать простои или кто? =) |
|
Сообщ.
#625
,
|
|
|
|
Цитата korvin @ В случае применения функции к статически сформированного списка ничего не теряем Подробнее? Добрался до компа, вот пример с "шаблонным мусором": ![]() ![]() void format_print(const char *s) { std::cout << s; } template<typename T, typename... Args> void format_print(const char* s, T value, Args... args) { while (s && *s) { if (*s=='%' && *(s+1) !='%') { std::cout << value; return format_print(++s, args...); } std::cout << *s++; } } ![]() ![]() format_print("a = %, b = %, c = %", 10, 2.1, "aaa"); ![]() ![]() a = 10, b = 2.1, c = aaa Это просто пример, понятно, что операция вывода конкретного объекта может быть просто полиморфной и "унаследованной" от корня. Тем не менее, тут видно, что информация о типе сохраняется. Да, для читающих, хочу заметить, что к обсуждению js это никакого отношения уже не имеет Речь о том, как "правильнее" сделать функцию с произвольным числом аргументов в языке со статической типизацией. Добавлено Цитата Астарот @ Тебе может казаться что угодно, на реальность это не влияет никак - js отлично подходит для своей ниши и все попытки "исправить" его обозначают "портить хорошую вещь". А может быть он отлично подходит потому, что к нему все "привыкли"? Чем он как язык хуже какой-нибудь lua, кроме того, что его поддерживают браузеры ? |
|
Сообщ.
#626
,
|
|
|
|
Цитата D_KEY @ Да, для читающих, хочу заметить, что к обсуждению js это никакого отношения уже не имеет А ну марш на мороз! Добавлено Цитата D_KEY @ А может быть он отлично подходит потому, что к нему все "привыкли"? А может быть стоит его выучить и попользоваться, что бы не задавать риторических вопросов? Цитата D_KEY @ Чем он как язык хуже какой-нибудь lua, кроме того, что его поддерживают браузеры ?А чем Lua лучше, не говоря уж о том, что браузеры Lua не поддерживают? |
|
Сообщ.
#627
,
|
|
|
|
Цитата Астарот @ А может быть стоит его выучить и попользоваться Договорились Добавлено Астарот, литературу порекомендовать можешь хорошую? |
|
Сообщ.
#628
,
|
|
|
|
Цитата D_KEY @ Чем он как язык хуже какой-нибудь lua Вообще ей богу на таких вопросах хочется взять и уе... ну, ты понял. Показывают абсолютное незнание языка ВООБЩЕ. Сравнение идет на уровне синтаксиса и не далее, но при этом "а чем лучше", да еще и "кроме ключевой и основной особенности и области применения" Lua хуже тем, что там нет getElementById() - ВНЕЗАПНО нет, потому как Lua не используется в браузере где getElementById() нужен. Так же ВНЕЗАПНО там нет getElementsByTagName - в силу отсутствия тегов. В общем если подумать, то Lua, как замена js хуже js тем, что Lua не js... Добавлено Цитата D_KEY @ Астарот, литературу порекомендовать можешь хорошую? Это запросто - пожалуй единственная в природе действительно вменяемая книга http://www.books.ru/books/javascript-podro...-555423/?show=1 |
|
Сообщ.
#629
,
|
|
|
|
Цитата Астарот @ Сравнение идет на уровне синтаксиса и не далее На синтаксис мне плевать, мне семантика важна. Цитата Lua хуже тем, что там нет getElementById() - ВНЕЗАПНО нет, потому как Lua не используется в браузере где getElementById() нужен. Так же ВНЕЗАПНО там нет getElementsByTagName - в силу отсутствия тегов. В общем если подумать, то Lua, как замена js хуже js тем, что Lua не js... Естестевенно, там был бы и getElementById и getElementsByTagName. Проблема-то в чем? Обычные библиотечные функции. Добавлено Цитата Астарот @ Цитата D_KEY @ Астарот, литературу порекомендовать можешь хорошую? Это запросто - пожалуй единственная в природе действительно вменяемая книга http://www.books.ru/books/javascript-podro...-555423/?show=1 Ага, спасибо Добавлено MyNameIsIgor, тебе теперь пм не отправить... Зря ты так разошелся, хотя провокаторы-то известны, не будем показывать пальцем... |
|
Сообщ.
#630
,
|
|
|
|
Цитата D_KEY @ Естестевенно, там был бы и getElementById и getElementsByTagName. Проблема-то в чем? Обычные библиотечные функции. Ну так когда будут - тогда и можно говорить К тому же это далеко не единственное чего там нет. Добавлено Цитата D_KEY @ хотя провокаторы-то известны, не будем показывать пальцем... Ну, ты еще пожалей его - такого няфффку ни за что, ни про что обиженного Добавлено Кстати, вот ты все время "пользователь может вызвать функцию не так... надо вернуть ошибку..." Браузер вообще-то тот же пользователь - именно он вызывает код обработчиков события, и ему ошибку возвращать бессмысленно - браузер тупой, он как вызывал так и будет вызывать, ему пофиг на все С этой точки зрения нужна максимальная лояльность в форме вызова, что бы дать возможность отработать коду внутрях, вдруг он сможет разрулить противоречие. Иначе пришлось бы делать так:1. узнать версию браузера 2. при подвешивании события устроить кучку if'ов, типа если ie, то обработчик вызвать так, если ff - сяк... При этом первый пункт придется реализовывать на том же js, а значит могут быть нюансы зависящие от браузера, для разруливания которых нужно браузер определить, для чего придется... и так далее по кругу А второй пункт обозначает что у тебя каждое подвешивание события обрастет бахромой лишнего кода. Оно это все надо? Особенно если учесть, что и с максимальной лояльностью приходится учитывать различия браузеров, и это дается не малой кровью. А прикинь если все будет более строго, а? |