Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Мини-тест ("опечатка" + стилистика кода + "известный механизм" языка) (https://javascript.ru/forum/misc/7041-mini-test-opechatka-stilistika-koda-izvestnyjj-mekhanizm-yazyka.html)

Dmitry A. Soshnikov 12.01.2010 15:59

Цитата:

Сообщение от subzey
iff (!x) /* заканчивается \r\n — запускаем функцию iff — ошибка, если такой нет */

Верно. Механизм автоматической вставки точки с запятой завершит эту инструкцию.

Это самый главный момент - это именно RuntimeError, не ParseError (SyntaxError). Соответственно, если ещё и функция iff существует, то в этом месте ошибки вообще не будет (а вот такие ошибки уже являются ошибками логики программы - программа полностью рабочая и нерабочая одновременно).

Причина и следствие ясны.

Возможно ли как-то избавиться от RuntimeError (именно это я имел в виду, когда спрашивал про избавление от подобного типа ошибки), но не допустить ошибки в логике программы? Т.е. можно, конечно, объявить функцию iff, и RuntimeError-a не будет, но это ещё больше усугубит дело, т.к. ошибка не будет отловлена.

Цитата:

Сообщение от subzey
{ /* начинаем объявление объекта */ x = 1; /* ошибка синтаксиса, что-то типа «недопустимое имя свойства»? */ }

Угу, спасибо, возможно. Ещё подождём.

PeaceCoder 12.01.2010 23:30

Цитата:

Сообщение от subzey
{ /* начинаем объявление объекта */ x = 1; /* ошибка синтаксиса, что-то типа «недопустимое имя свойства»? */ }

это уже parseErrorr и программа не запустится. вопрос стоит так что написание программы проходит компиляцию но в процессе выполнения будут ошибки или вообще ошибок не будет но работать будет не так как надо.

Dmitry A. Soshnikov 12.01.2010 23:45

Цитата:

Сообщение от PeaceCoder
это уже parseErrorr и программа не запустится

Не обязательно ;) Я не сказал, что будет ошибка с фигурными скобками, я сказал "возможно", чтобы другие могли ответить.

Меня как раз интересует, можно ли сделать так, чтобы был SyntaxError на стадии парсинга? Чтобы мы отловили ошибку с iff ещё до запуска и не допустили случая логической ошибки, если будет существовать функция iff.

В сущности, все подсказки были даны в заголовке темы (две из них уже разобраны).

PeaceCoder 12.01.2010 23:49

ну остается только механизм. это обьявление функции при которой ключевое слово funcion отсутсвует.

Dmitry A. Soshnikov 13.01.2010 00:27

Цитата:

Сообщение от PeaceCoder
ну остается только механизм.

Нет, "механизм" из подсказок, уже задействовали - это механизм автоматической вставки точки с запятой.

Также, задействовали "опечатку".

Осталась "стилистика кода". Отмечу, что я обычно использую стилистику не ту, что была приведена в примере, хотя в текущем проекте у нас принята именно стилистика из примера.

Gvozd 13.01.2010 01:35

пока пришла в голову только использовать обязательно конечный else, таким образом вызывая именно ошибку парсинга
непонятно что делать с другими стандартными структырами типа циклов do,do-while, и условий switch-case(фигню сморозил.они дадут syntax error на первом case)

B~Vladi 13.01.2010 01:36

Если не будет точки с запятой внутри фигурных скобок - ошибки не будет:-? (будет, невнимательность:))

Цитата:

Сообщение от Dmitry A. Soshnikov
Меня как раз интересует, можно ли сделать так, чтобы был SyntaxError на стадии парсинга? Чтобы мы отловили ошибку с iff ещё до запуска

Писать нужно как принято и не будет никаких двойственных ситуаций (я про перенос скобки).
iff (!x) {
  x = 1;
}

Gvozd 13.01.2010 02:01

Цитата:

Сообщение от 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');

B~Vladi 13.01.2010 08:54

Цитата:

Сообщение от Gvozd
//в опере данный код показывает один alert, после чего процессор начинает показывать 100% нагруженность, без каких-либо изменений на странице скрипта //мозилла показывает ошибку missing ; before statement "doq {\n"

Видимо, опера добавляет ";" после doq (может, потому что находит значение doq?), т.к. если самому это вставить в мозилле - эффект будет тот же как и в опере. Непонятно только почему выскакивает алерт - открывающая скобка никого не смущает?! Получается, что можно указывать любые выражения в имени свойства?:-?

Gvozd 13.01.2010 10:10

Цитата:

Сообщение от 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

на самом деле для разработки приложений решает проблему, ибо обычно код отлаживается в первую очередь при помощи огнелиса, и в нем синтаксическая ошибка и вылезет


Часовой пояс GMT +3, время: 02:43.