
12.01.2010, 15:59
|
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
|
Сообщение от subzey
|
|
iff (!x) /* заканчивается \r\n — запускаем функцию iff — ошибка, если такой нет */
|
Верно. Механизм автоматической вставки точки с запятой завершит эту инструкцию.
Это самый главный момент - это именно RuntimeError, не ParseError (SyntaxError). Соответственно, если ещё и функция iff существует, то в этом месте ошибки вообще не будет (а вот такие ошибки уже являются ошибками логики программы - программа полностью рабочая и нерабочая одновременно).
Причина и следствие ясны.
Возможно ли как-то избавиться от RuntimeError (именно это я имел в виду, когда спрашивал про избавление от подобного типа ошибки), но не допустить ошибки в логике программы? Т.е. можно, конечно, объявить функцию iff, и RuntimeError-a не будет, но это ещё больше усугубит дело, т.к. ошибка не будет отловлена.
|
Сообщение от subzey
|
|
{ /* начинаем объявление объекта */ x = 1; /* ошибка синтаксиса, что-то типа «недопустимое имя свойства»? */ }
|
Угу, спасибо, возможно. Ещё подождём.
Последний раз редактировалось Dmitry A. Soshnikov, 12.01.2010 в 16:30.
|
|

12.01.2010, 23:30
|
 |
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
|
Сообщение от subzey
|
|
{ /* начинаем объявление объекта */ x = 1; /* ошибка синтаксиса, что-то типа «недопустимое имя свойства»? */ }
|
это уже parseErrorr и программа не запустится. вопрос стоит так что написание программы проходит компиляцию но в процессе выполнения будут ошибки или вообще ошибок не будет но работать будет не так как надо.
|
|

12.01.2010, 23:45
|
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
|
Сообщение от PeaceCoder
|
|
это уже parseErrorr и программа не запустится
|
Не обязательно  Я не сказал, что будет ошибка с фигурными скобками, я сказал "возможно", чтобы другие могли ответить.
Меня как раз интересует, можно ли сделать так, чтобы был SyntaxError на стадии парсинга? Чтобы мы отловили ошибку с iff ещё до запуска и не допустили случая логической ошибки, если будет существовать функция iff.
В сущности, все подсказки были даны в заголовке темы (две из них уже разобраны).
|
|

12.01.2010, 23:49
|
 |
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
|
ну остается только механизм. это обьявление функции при которой ключевое слово funcion отсутсвует.
|
|

13.01.2010, 00:27
|
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
|
Сообщение от PeaceCoder
|
|
ну остается только механизм.
|
Нет, "механизм" из подсказок, уже задействовали - это механизм автоматической вставки точки с запятой.
Также, задействовали "опечатку".
Осталась "стилистика кода". Отмечу, что я обычно использую стилистику не ту, что была приведена в примере, хотя в текущем проекте у нас принята именно стилистика из примера.
|
|

13.01.2010, 01:35
|
 |
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
|
пока пришла в голову только использовать обязательно конечный else, таким образом вызывая именно ошибку парсинга
непонятно что делать с другими стандартными структырами типа циклов do,do-while, и условий switch-case(фигню сморозил.они дадут syntax error на первом case)
|
|

13.01.2010, 01:36
|
 |
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Если не будет точки с запятой внутри фигурных скобок - ошибки не будет (будет, невнимательность  )
|
Сообщение от Dmitry A. Soshnikov
|
|
Меня как раз интересует, можно ли сделать так, чтобы был SyntaxError на стадии парсинга? Чтобы мы отловили ошибку с iff ещё до запуска
|
Писать нужно как принято и не будет никаких двойственных ситуаций (я про перенос скобки).
iff (!x) {
x = 1;
}
Последний раз редактировалось B~Vladi, 13.01.2010 в 01:55.
|
|

13.01.2010, 02:01
|
 |
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
|
Сообщение от B~Vladi
|
|
Писать нужно как принято и не будет никаких двойственных ситуаций (я про перенос скобки).
|
видимо это и есть то к чему нас подводил Дмитрий
хотя не факт
ибо, такой подход все еще не решает проблему do-while
x=false;
doq=123;
i=0;
doq {
alert(i);//в опере данный код показывает один alert, после чего процессор начинает показывать 100% нагруженность, без каких-либо изменений на странице скрипта
//мозилла показывает ошибку missing ; before statement "doq {\n"
i++;
if(i==3)
x = true;
}while(!x);
alert('end');
|
|

13.01.2010, 08:54
|
 |
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
|
Сообщение от Gvozd
|
//в опере данный код показывает один alert, после чего процессор начинает показывать 100% нагруженность, без каких-либо изменений на странице скрипта //мозилла показывает ошибку missing ; before statement "doq {\n"
|
Видимо, опера добавляет ";" после doq (может, потому что находит значение doq?), т.к. если самому это вставить в мозилле - эффект будет тот же как и в опере. Непонятно только почему выскакивает алерт - открывающая скобка никого не смущает?! Получается, что можно указывать любые выражения в имени свойства? 
|
|

13.01.2010, 10:10
|
 |
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
|
Сообщение от B~Vladi
|
|
любые выражения в имени свойства?
|
вы забываете что фигурные скобочки используются не только для объектов, но и для блочности кода
то есть в зависимости от контекста, фигурные скобочки будут использоваться так или иначе
<script type="text/javascript">
var qwe={alert(1)};//missing : after property id, ибо объект
</script>
<script type="text/javascript">
{alert(1)};//выведет alert, ибо это блок кода
</script>
|
Сообщение от Gvozd
|
|
ибо, такой подход все еще не решает проблему do-while
|
|
Сообщение от Gvozd
|
|
//в опере данный код показывает один alert
|
на самом деле для разработки приложений решает проблему, ибо обычно код отлаживается в первую очередь при помощи огнелиса, и в нем синтаксическая ошибка и вылезет
|
|
|
|