Синтаксическая ошибка это как

From Wikipedia, the free encyclopedia

In computer science, a syntax error is an error in the syntax of a sequence of characters or tokens that is intended to be written in a particular programming language.

For compiled languages, syntax errors are detected at compile-time. A program will not compile until all syntax errors are corrected. For interpreted languages, however, a syntax error may be detected during program execution, and an interpreter’s error messages might not differentiate syntax errors from errors of other kinds.

There is some disagreement as to just what errors are «syntax errors». For example, some would say that the use of an uninitialized variable’s value in Java code is a syntax error, but many others would disagree[1][2] and would classify this as a (static) semantic error.

In 8-bit home computers that used BASIC interpreter as their primary user interface, the SYNTAX ERROR error message became somewhat notorious, as this was the response to any command or user input the interpreter could not parse.
A syntax error can occur or take place, when an invalid equation is being typed on a calculator. This can be caused, for instance, by opening brackets without closing them, or less commonly, entering several decimal points in one number.

In Java the following is a syntactically correct statement:

System.out.println("Hello World");

while the following is not:

System.out.println(Hello World);

The second example would theoretically print the variable Hello World instead of the words «Hello World». However, a variable in Java cannot have a space in between, so the syntactically correct line would be System.out.println(Hello_World).

A compiler will flag a syntax error when given source code that does not meet the requirements of the language’s grammar.

Type errors (such as an attempt to apply the ++ increment operator to a boolean variable in Java) and undeclared variable errors are sometimes considered to be syntax errors when they are detected at compile-time. However, it is common to classify such errors as (static) semantic errors instead.[2][3][4]

Syntax errors on calculators[edit]

Syntax error in a scientific calculator

A syntax error is one of several types of errors on calculators (most commonly found on scientific calculators and graphing calculators), representing that the equation that has been input has incorrect syntax of numbers, operations and so on. It can result in various ways, including but not limited to:

  • An open bracket without closing parenthesis (unless missing closing parenthesis is at very end of equation)
  • Using minus sign instead of negative symbol (or vice versa), which are distinct on most scientific calculators. Note that while some scientific calculators allow a minus sign to stand in for a negative symbol, the reverse is less common.

See also[edit]

  • Tag soup

References[edit]

  1. ^ Issue of syntax or semantics?
  2. ^ a b Semantic Errors in Java
  3. ^ Aho, Alfred V.; Monica S. Lam; Ravi Sethi; Jeffrey D. Ullman (2007). Compilers: Principles, Techniques, and Tools (2nd ed.). Addison Wesley. ISBN 978-0-321-48681-3. Section 4.1.3: Syntax Error Handling, pp.194–195.
  4. ^ Louden, Kenneth C. (1997). Compiler Construction: Principles and Practice. Brooks/Cole. ISBN 981-243-694-4. Exercise 1.3, pp.27–28.

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

Ошибки в структуре словосочетаний:

1. Нарушение согласования с главным словом в роде, числе и падеже слова зависимого, выраженного прилагательным, причастием, порядковым числительным, местоимением: «Нынешнее летом я был в степном Заволжье».

2. Нарушение управления. Ошибки в беспредложном управлении (неправильный выбор предлога): «Если в жаркий день дотронешься к березе, то почувствуешь прохладный ствол».

3. Неправильный выбор падежа при правильно выбранном предлоге: «Он был похож на смертельно усталым человеком».

4. Пропуск предлога: «Пообедав торопливо, сел за штурвал, поехал (?) поле».

5. Употребление лишнего предлога «Жажда к славе».

6. Пропуск зависимого компонента словосочетания: «Снова садится в жаркую кабину, снова крутить лоснящийся от ладоней штурвал, (?) ехать».

Ошибки в строении и значении предложения:

1. Нарушение связи между подлежащим и сказуемым: «Но не вечно ни юность, ни лето», «Солнце уже села, когда мы вернулись».

2. Отсутствие смысловой законченности предложения, нарушение его границ: «Однажды в годы войны. Попал в тополь снаряд».

3. Синтаксическая двузначность: «Их (девочек) мечта сбылась, они (рыбаки) вернулись».

4. Нарушение видовременной соотнесенности глаголов в составе предложения: «Гринев видит, как Пугачев садился в карету».

Ошибки в простом двусоставном предложении:

Подлежащее:

– Местоименное дублирование подлежащего: «Дети, сидящие на старой опрокинутой вверх килем лодке, они ждут своего отца».

– Нарушение согласования подлежащего и местоимения, заменяющего подлежащее в другом предложении: «Видимо, на море шторм, поэтому он полон опасностей». 

Сказуемое:

– Ошибки в конструировании сказуемого: «Все были счастливые».

– Нарушение согласования сказуемого в роде и числе с подлежащим, выраженным собирательными существительным, количественно-именным словосочетанием, вопросительным и неопределенным местоимением: «Я с мамой остались дома», «В комнату проникли сноп лучей солнца».

– Местоименное дублирование дополнения: «Многие книги их можно читать несколько раз».

Определение:

– Неправильное использование несогласованного определения: «Справа висят светильник и мой портрет из садика».

– Нагромождение согласованных и не согласованных определений, относящихся к одному члену предложения: «Огромный, прекрасный мир жизни нашей страны и наших сверстников открывается в миллионах книг».

– Неверный выбор морфологической формы обстоятельства: «Я учу уроки на столе» (за столом). 

Ошибки в односоставном предложении:

1. Использование двусоставных конструкций на месте односоставных.

2. Использование деепричастного оборота в безличном предложении: «Увидев собаку, мне стало жаль ее».

Предложения с однородными членами:

1. Использование разных частей речи в роли однородных членов предложения: «Комната мне нравится, потому что в ней светло, большая, чистая».

2. Включение в ряд однородных членов слов, обозначающих неоднородные понятия: «Когда весна и ясный день, солнце освещает всю мою комнату».

3. Неправильное использование сочинительных союзов для соединения однородных членов: «Мальчик был лобастый, но серьезный».

4. Неверное присоединение к одному главному члену логически неоднородных второстепенных членов: «В шкафу стоят книги, на полках лежат газеты и стеклянная посуда».

5. Ошибки в согласовании однородных подлежащих со сказуемым: «Тревога и тоска застыла в ее глазах».

6. Нарушения в области однородных сказуемых:

а) использование разных типов сказуемых в качестве однородных: «Море после шторма спокойное, ласковое и играет лучами солнца»;

б) нарушение единообразного оформления составных именных сказуемых: использование разных падежных форм именной части однородных составных именных сказуемых: «Их отец был опытным рыбаком и отважный мореход»; присоединение к однородным глагольным сказуемым дополнения, которое управляется лишь одним из сказуемых: «Все очень ждут и переживают за солдат»; употребление кратких и полных форм прилагательных и причастий в именной части: «Моя комната недавно отремонтирована: побелена и покрашенная».

7. Объединение членов и частей разных предложений на правах однородных: «Под березой растут грибы, ягоды, подснежники расцветают весной». «Дети ждали отца и когда покажется его лодка».

Предложения с вводными словами и вводными конструкциями:

1. Неправильный выбор вводного слова: «Девочки напряженно вглядывались в даль моря: наверное, на горизонте появится лодка».

2. Использование такого вводного слова, которое приводит к двусмысленности: «По словам рыбаков, ночью был шторм, а теперь штиль».

3. Употребление вводного предложения как самостоятельного: «Книга – источник знаний. Как утверждают многие».

Предложения с обособленными членами:

1. Нарушение порядка слов в предложениях с причастным оборотом.

– Отрыв причастного оборота от определяемого слова: «Но с деревом опять произошло несчастье: его ветви обрубили, расположенные низко».

– Включение определяемого слова в состав причастного оборота: «У девочек устремленный взгляд в море». 

2. Нарушение правил построения причастного оборота.

– Построение причастного оборота по образцу придаточного предложения: «На картине изображена девочка, которая только вставшая».

– Употребление причастного оборота вместо деепричастного: «И каждый раз, возвращавшиеся обратно, мы садились под тополем и отдыхали».

3. Ошибки в предложениях с обособленными обстоятельствами, выраженными деепричастным оборотом: Отдыхая в кресле, передо мной висит картина «Март».

Способы передачи прямой речи. Прямая и косвенная речь:

1. Объединение прямой речи и слов автора: Перед войной отец сказал мне: «Ухаживай за деревом и ушел на фронт».

2. Употребление прямой речи без слов автора: Девочки увидели баркас: «Папа!».

3. Смешение прямой косвенной речи: Дедушка сказал, что в детстве у них был такой закон: в дни рождения дарили мы только то, что сделано было своими руками».

4. Ошибки при введении цитат: К. Паустовский говорил, что «Человек, любящий и умеющий читать, счастливый человек».

Сложные предложения:

1. Нарушение логико-грамматической связи между частями сложносочиненного предложения: «Мой отец долго не забывал эту историю, но он умер».

2. Использование местоимения во второй части сложносочиненного предложения, приводящее к двусмысленности: «Пусть надежды сбудутся, и они вернутся».

3. Ошибки в использовании сложносочиненных союзов:

а) соединительных – для связи частей сложносочиненного предложения при отсутствии между ними противительных отношений: «Вчера был шторм, и сегодня все кругом было спокойно».

б) противительных – для соединения частей сложносочиненного предложения при отсутствии между ними противительных отношений: «У нас во дворе растет береза, но на ней тоже набухают почки»;

в) двойных и повторяющихся: «Не то птица села на воду, или обломки разбитой лодки плывут по морю»;

г) неоправданный повтор союзов: «И вдруг девочки увидели маленькую черную точку, и у них появилась надежда»;

д) неудачный выбор союзов: «Митраше было десять лет с хвостиком, но сестра была старше».

Сложноподчиненные предложения:

1. Несоответствие вида придаточного предложения значению главного: «Но они все же дождутся своего отца, так как рыбаков обязательно должны ждать на берегу».

2. Использование сочинения и подчинения для связи частей в сложноподчиненном предложении: «Если человек не занимается спортом, и он быстро стареет».

3. Утяжеления конструкций за счет «нанизывания» придаточных предложений: «Парус появился в море как счастливая весть о том, что с рыбаками все в порядке и что девочки смогут скоро обнять своих родителей, которые задержались в море, потому что был сильный шторм».

4. Пропуск необходимого указательного слова: «Мама всегда меня ругает, что я разбрасываю свои вещи».

5. Неоправданное употребление указательного слова: «У меня есть такое предположение, что рыбаков задержал шторм».

6. Неправильное использование союзов и союзных слов при правильном их выборе:

а) употребление союзов и союзных слов в середине придаточного предложения: «В комнате на тумбочке стоит телевизор, после школы по которому я смотрю развлекательные передачи»;

б) нарушение согласования союзного слова в придаточном предложении с замещаемым или определительным словом в главном предложении: «На двух полочках – художественная литература, которыми я пользуюсь при подготовке к урокам».

7. Использование однотипных придаточных предложений при последовательном подчинении: «Прогуливаясь по берегу, я увидела двух девочек, которые сидели на перевернутой лодке, которая лежала у берега верх килем».

8. Использование придаточного предложения как самостоятельного: «Девочки беспокоятся за своих родных. Поэтому так печально глядят они в даль».

Бессоюзное сложное предложение:

1. Нарушение единства конструкций однородных частей в составе бессоюзного сложного предложения: «На картине изображено: раннее утро, только встает солнце».

2. Разложение частей бессоюзного сложного предложения на самостоятельные предложения: «Одеты девочки просто. На них летние ситцевые платья. На голове у старшей платок».

3. Одновременное использование бессоюзной и союзной связи: «Одежда на девочках простая: которая постарше с платком на голове, в синей юбке и серой кофте, младшая без платка, в фиолетовом платье и темно-синей кофточке».

Сложное предложение с различными видами связи:

1. Нарушение порядка следования частей предложения: «Волны еще пенятся, но у берега успокаиваются; чем ближе к горизонту, тем море темнее; и поэтому у девочек есть надежда, что отец вернется».

2. Использование местоимений, приводящих к двусмысленности: «Мы видим, что кровать у девочки не заправлена, и она подтверждает, что девочка только что встала».

247

Здесь пропущена закрывающая скобка. Это не обнаружится до тех пор,

пока не встретится fi. Однако неясно, где должна стоять эта скобка: после r,

после q, после p или 2. Выяснить, что предполагал программист, невозможно.

Поэтому самый легкий способ «исправления» – поставить закрывающую скобку непосредственно перед fi. Синтаксический анализатор продолжает работать, а на выход выдается сообщение о введенных изменениях.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Термин «синтаксическая ошибка» употребляется для обозначения ошибки, обнаруживаемой контекстно-свободным синтаксическим анализатором.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Современные анализаторы обладают этим важным свойством – обна-

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

рый не должен следовать за прочитанной к тому времени последовательно-

стью символов [2].

Ошибка в виде пропуска или неправильного употребления, допущен-

ная на более раннем этапе, может проявиться совсем в другом месте про-

граммы.

· · · · · · · · · · · · · · · · · · · · · · · ·

Пример · · · · · · · · · · · · · · · · · · · · · · ·

Это можно проиллюстрировать следующим примером. while x > y; begin <something> end.

248

Никакого сообщения об ошибке при встрече «;» на данной стадии син-

таксический анализатор не выдаст. Последствия ее могут появиться на более поздней фазе анализа.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

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

кие-либо символы, включить какие-либо символы или изменить их. Суще-

ствует ряд стратегий исправления ошибок. Практически все они хорошо сра-

батывают в одних случаях и плохо – в других. «Хорошая» стратегия заклю-

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

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

9.4.1 МЕТОДЫ ИСПРАВЛЕНИЯ СИНТАКСИЧЕСКИХ ОШИБОК

Режим переполоха. Один из наиболее распространенных методов ис-

правления синтаксических ошибок носит название «режим переполоха».

При появлении недопустимого символа весь последующий исходный текст, вплоть до соответствующего ограничителя (например, «;» или end),

игнорируется. Ограничитель заканчивает какую-то конструкцию языка, и

элементы удаляются из стека разбора до тех пор, пока не встретится адрес возврата. Этот элемент тоже удаляется из стека, а разбор продолжается,

начиная с адреса в таблице разбора, содержащего следующий входной сим-

вол. Такой метод довольно легко реализуется, но имеет серьезный недоста-

ток: длинные последовательности кода, соответствующие игнорируемым символам, не анализируются.

Исключение символов. Метод исключения символов также легко реа-

лизуется и не требует изменения степени разбора. Когда считывается недо-

пустимый символ, и он сам, и все последующие символы исключаются из

249

исходной строки до тех пор, пока не встретится допустимый символ. Хотя при таком методе могут исключаться длинные последовательности, в от-

дельных случаях он весьма эффективен.

· · · · · · · · · · · · · · · · · · · · · · · ·

Пример · · · · · · · · · · · · · · · · · · · · · · ·

Например, в записи

c := d+3; end,

где символ «;» является недопустимым, исправление ошибки – идеальное.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Однако исключение скобок обычно разрушает блочную структуру и приводит к дальнейшим синтаксическим ошибкам.

Включение символов. Некоторые синтаксические анализаторы имеют наготове множество действительных символов продолжения. В некоторых случаях оправдано исправление программ путем включения символов – под-

становки одного из таких символов перед недопустимым символом, который вызвал ошибку.

· · · · · · · · · · · · · · · · · · · · · · · ·

Пример · · · · · · · · · · · · · · · · · · · · · · ·

Например, последовательность

end begin

никогда не будет допустимой. Однако включение «;» между end begin позво-

лит анализатору продолжить работу.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Конечно, в таких ситуациях может иметь место неправильная подста-

новка, даже если анализатор продолжит работу.

Правила для ошибок. Один из способов исправления некоторых ти-

пов синтаксических ошибок заключается в расширении синтаксиса языка за

250

счет включения в него программ, содержащих типичные ошибки. Это не зна-

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

допустимым и не потребует никаких исправлений.

· · · · · · · · · · · · · · · · · · · · · · · ·

Пример · · · · · · · · · · · · · · · · · · · · · · ·

Так, можно обращаться, например, с ошибками типа «;» перед end или пропуск «;».

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Дополнительные правила, включенные в грамматику, обычно называ-

ются правилами для ошибок. Они неизбежно приводят к увеличению грамма-

тики, и поэтому включать их следует только для наиболее часто встречаю-

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

9.4.2 ПРЕДУПРЕЖДЕНИЯ

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Наряду с сообщениями о синтаксических ошибках, анали-

затор может выдавать предупреждения, когда ему встрети-

лась допустимая, но маловероятная последовательность симво-

лов.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

· · · · · · · · · · · · · · · · · · · · · · · ·

Пример · · · · · · · · · · · · · · · · · · · · · · ·

Пример маловероятной последовательности символов:

;do

·· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

О, нет, ошибки! И как с ними справляться

Введение в программирование

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Транскрипт урока

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

— Эй, можешь сходить в магазин и купить какой-нибудь еды?

Она отвечает:

— Что именно?

Вы говорите:

— Ну, типа чипсы или что-нибудь такое. У нас всё закончилось.

Она отвечает:

— Сколько упаковок чипсов взять?

И у вас уже начинает немного вскипать мозг:

— Да, я не знаю, штук 5.

— А какие чипсы?

И вы так глазами делаете и отвечаете «ааа… забудь», или решаете идти до конца и объясняете подробно задачу: «Возьми 5 средних пакетов картофельных чипсов со вкусом бекона».

Десять минут спустя она возвращается с пустыми руками и говорит «у них не было таких чипсов в пакетах среднего размера».

О «программистах» есть определённые стереотипы и то, что они могут быть слишком конкретными и чересчур дотошными — один из них. Многие думают, что такие люди хорошо разбираются в математике или что-то подобное.

В реальности всё намного сложнее. Не существует всего двух типов людей, спектр типов личности буквально бесконечен. И для некоторых людей программирование немного более органично, потому что компьютеры абсолютно конкретные и абсурдно однозначные. Это совершенно не значит, что если вы считаете, что у вас «нематематический склад ума», вы не сможете стать хорошим разработчиком. Это значит только, что вам нужно научиться лучше распознавать и понимать, как именно работают компьютеры.

Такой способ поведения компьютеров ведёт ко множеству ошибок. Если вы наберёте  console,log — console запятая log, вместо console точка log, JavaScript скажет «Понятия не имею, что ты имел в виду».

Вы будете делать ошибки и ваши программы будут содержать ошибки. Жизнь — она такая. Любой программист делает ошибки и это не имеет особого значения. Значение имеет только то, как вы потом с ними справляетесь. Исправление ошибок — важный навык. Это делает программирование непохожим на другие типы работ: ошибки неизбежны, вы не можете от них полностью застраховаться, а исправление ошибок — часть вашей работы.

Ошибка вроде «запятая вместо точки» это тип, который проще всего заметить и исправить. Это «синтаксическая ошибка», потому что неверный символ, как запятая в этом случае, нарушает синтаксические правила языка.

Когда вы запускаете код с такой ошибкой, интерпретатор JavaScript — та штука, которая исполняет JavaScript-программы — пожалуется: SyntaxError и укажет вам на то место, где по его мнению есть проблема.

const cube = (num) => {
  return num * num * num;
})
→ node test.js
/Users/rakhim/test.js:3
})
 ^
SyntaxError: Unexpected token )
    at Object.exports.runInThisContext (vm.js:78:16)
    at Module._compile (module.js:543:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:420:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:535:3

Вот, например, это определение функции и в конце — лишняя скобка. Её там быть не должно и это ломает всю программу, поэтому JavaScript жалуется: «SyntaxError:» Unexpected token (символ))». Эта скобка unexpected — неожиданная.

Синтаксическая ошибка — это как если кто-то бредит вслух. Никто вокруг ничего не понимает.

Следующий тип ошибки подобен синтаксической, но в этом случае вы нарушаете не законы синтаксиса языка, а как бы законы синтаксиса собственного кода. В прошлый раз мы создали функцию  abs, которая возвращала абсолютное значение числа.

→ node test.js
/Users/rakhim/test.js:1
 ads(12);
 ^
ReferenceError: ads is not defined
    at Object.<anonymous> (/Users/rakhim/test.js:1:63)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:420:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:535:3

Если вы вызовете  ads  вместо  abs, интерпретатор JavaScript пожалуется:  ReferenceError: ads is not defined. Вы использовали, как вам кажется, существующее название, но на самом деле такого названия нет.

Несколько строк, которые следуют после указания ошибки, могут смутить и оттолкнуть вас, но они тут только для пользы. Это stack trace — последовательность вызовов функций, которая привела к ошибке. Когда вы запускаете свою программу, даже крошечную, она становится частью чего-то более крупного — сложной системой JavaScript-кода, который приводится в действие, чтобы оживить вашу программу. Тут видно, что проблема была в моём файле. Следующая строка — это место, откуда был вызван мой код, третья строка — откуда была вызвана вторая и в таком духе можно продолжать дальше. Это как отслеживать шаги в обратном направлении — проблема есть, и мы можем возвращаться по одному шагу назад и смотреть, не нашлась ли ошибка.

Мы допускаем, что вся внутренняя система исправно работает, поэтому ошибка в нашем коде. Когда одна из ваших функций вызывает другую, вы увидите эту последовательность вызовов в стектрейсе.

ReferenceError может случиться с другими константами: например, если ваш код содержит  10 * pi, а pi не существует, потому что вы не создавали константу с точно таким названием, вы получите ReferenceError.

ReferenceError — это как называть кого-то чужим именем.

Следующий тип ошибки — когда вы путаете одну вещь с другой. Взгляните на этот код:

const length = 12;
const num = length(54);

Сначала мы создали константу. Помните, что это как давать чему-то название: в нашем случае — числу 12 даётся название length. В следующей строке мы вызываем функцию length и передаём ей аргумент — число 54. Но подождите! length — это не функция! Это всего лишь число. Числа — это не функции, не ящики, которые производят какие-то действия. И JavaScript пожалуется именно на это:

→ node test.js
/Users/rakhim/test.js:2
const num = length(-54);
            ^

TypeError: length is not a function
    at Object.<anonymous> (/Users/rakhim/test.js:2:13)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:420:7)
    at startup (bootstrap_node.js:139:9)
    at bootstrap_node.js:535:3

Это Ошибка типизации: тип объекта, который вы использовали, неверный. Интерпретатор JavaScript не скажет чем что-то является, но точно скажет чем оно не являетсяlength — это не функция.

Ошибка типизации — это как просить кошку постирать бельё. Возможно, вы хотели попросить об этом вашего друга.

Все эти ошибки — syntax error, reference error и type error — возникают из-за использования неправильных слов. И все они предельно очевидные: вы видите сообщение об ошибке и достаточно хорошо понимаете в чём проблема. Обычно сразу понятно, как их исправить:

  1. Синтаксическая ошибка? Заменить, удалить или добавить символы. Часто проблема в скобках и кавычках: открытые скобки и открытые кавычки должны быть закрыты.
  2. Reference error? Проверить, существует ли тот объект, на который вы ссылаетесь. Возможно, вы использовали неправильное название или забыли создать его.
  3. Ошибка типизации? Убедиться, что вы используете объекты верно. Часто проблема — простая путаница: вы создали и числовую константу и функцию, а потом пытаетесь вызвать число. Наверное, вы хотели вызвать функцию.

Последний тип ошибки, о котором мы сегодня поговорим — самый злой: Логическая ошибка. Допустим, мы пишем функцию, которая конвертирует градусы по фаренгейту (F) в градусы по цельсию (C). Чтобы сконвертировать температуру по одной шкале в другую, нужно вычесть 32 и умножить на 5/9. Например (50°F — 32) x 5/9 = 10°C.

const fahrToCelsius = (fahr) => {
  return fahr - 32 * 5/9;
}

Выглядит нормально? Давайте запустим эту функцию, сконвертируем 50 градусов и выведем на экран:

console.log(fahrToCelsius(50));

И у нас получилось 32.22222222222222. Не 10. Что произошло? JavaScript не пожаловался, когда код запустился, никаких ошибок не выскакивало. Компьютер не знает, что нам нужно, поэтому он производит вычисление, как мы его и просили. Но такое вычисление ошибочно — допустили ошибку мы. Нам нужно вначале вычесть 32, а потом умножить это на 5/9. Но мы не использовали скобки, поэтому 32 вначале умножилось на 5/9, а затем результат был отнят от температуры в фаренгейтах.

Это Логическая ошибка. Мы не нарушили никаких правил, мы просто сделали что-то не то. Наш пример был простым: мы написали функцию, запустили её и увидели неверный результат. Но представьте, что функция — это только маленькая частица крупной системы. Приложение для формирования бюджета в огромной организации отправляет отчёт в главную бухгалтерию, что в следующем месяце для оплаты счёта за электричество требуются дополнительные $300 000. Организуется экстренное собрание, увольняют людей, генеральный директор снова уходит в запой. Что случилось?

Иногда обнаружить проблему может оказаться трудной задачей: система кондиционирования ожидает, что январская температура будет 32 градуса по цельсию, вместо 10, потому что кто-то забыл использовать скобки в функции.

Борьба с логическими ошибками — это целиком ваша ответственность. И временами — тяжёлая работа, но в конце приходит сильное облегчение и удовлетворение: а-ааа, так вот в чём была проблема!

Теперь ваша очередь делать ошибки! Выполните тест и упражнение, чтобы ощутить боль.

Дополнение к уроку

Листочек

Самый действенный способ понять, как работает участок кода —
это расписать его выполнение на бумажке, как если бы вы были компьютером (медленным и немного голодным).

Метод утенка

Метод утёнка — психологический метод решения задачи, делегирующий её мысленному помощнику. Метод описан в книге «Программист-прагматик».

Тестируемый ставит на рабочем столе игрушечного утёнка
(или представляет его мысленно; на самом деле уточка — это условно, предмет может быть любым), и когда у него возникает вопрос, на который трудно ответить, то он задаёт его игрушке, как живому человеку, словно она действительно может ответить.

Считается, что правильная формулировка вопроса содержит как минимум половину ответа, а также это дает толчок мыслям, направляя их в нужное русло.

Метод также используется при отладке. Если определённая часть программы не работает, программист пытается объяснить утёнку, что делает каждая строка программы, и в процессе этого сам находит ошибку.

Выводы

4 типа ошибок:

  1. Syntax error. Неверное использование языка. Часто лишние или недостающие скобки или кавычки. Что делать? Заменить, удалить или добавить символы. Часто проблема в скобках или кавычках: открытые скобки должны быть закрыты, открытые кавычки должны быть закрыты.
  2. Reference error. Использование несуществующего названия. Что делать? Проверить, существует ли то, на что вы ссылаетесь. Возможно вы использовали ошибочное название или забыли его создать.
  3. Type error. Использование неверного типа, например попытка вызвать константу числа, как функцию. Что делать? Убедиться, что всё используется верно. Часто проблема в простой путанице: вы создали численную константу и функциональную константу, а потом пытаетесь вызвать число. Вероятно вы собирались вызвать функцию.
  4. Logic error. (Логическая ошибка) Ваш код выполняет не то, что требуется, но программа запускается и не выдаёт ошибок трёх перечисленных выше типов. Сломана логика. Что делать? Проверить свой код, убедиться, что он выполняет то, что должен.

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Синтаксические ошибки

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

Солецизмы. Это ошибки синтаксического управления, согласования и др.: сколько время! (вместо сколько времени»}); оплатить за проезд (вместо оплатить проезд, ср. заплатить за проезд); полон энергией (вместо полон энергии, ср. исполнен энергией), отличие между ними в том, что… (ср. различие между ними, отличие одного от другого), имеет полное преимущество над соперником (вместо преимущество перед ср. превосходство над кем-то), отзыв на статью (вместо отзыв о статье, ср. рецензия на статью).

К солецизмам относятся и такие высказывания, как «Он вымогатель всеми способами»; «Ты сочинитель, да только неудачно» (Н. Гоголь); «Она улыбнется иль песней зальется» – И жемчугов ряд лицо осветят (из оперы) – правильно: осветит. «Книгу поставили на полке» (вместо на полку). «Иногда, слушая этих музыкантов, возникает вопрос: как они достигли такого совершенства?» (правильно:… когда слушаешь этих музыкантов…).

Энциклопедический словарь по психологии и педагогике.
2013.

Смотреть что такое «Синтаксические ошибки» в других словарях:

  • синтаксические ошибки — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN syntactic errors …   Справочник технического переводчика

  • синтаксические ошибки —    Это ошибки или недочеты в построении словосочетаний или предложений, нарушающие правила связи слов или ведущие к синтаксической омонимии и, как следствие, к двусмысленности высказывания. Здесь также наблюдается несколько различных типичных… …   Культура речевого общения: Этика. Прагматика. Психология

  • ГРАММАТИКО-СИНТАКСИЧЕСКИЕ ОШИБКИ — ГРАММАТИКО СИНТАКСИЧЕСКИЕ ОШИБКИ. Разновидность грамматических ошибок, связанных с нарушениями в построении словосочетаний и предложений. К подобным ошибкам относятся: 1) ошибки в согласовании, 2) ошибки в управлении, 3) ошибки в выборе порядка… …   Новый словарь методических терминов и понятий (теория и практика обучения языкам)

  • ОШИБКИ ГРАММАТИКО-СИНТАКСИЧЕСКИЕ — ОШИБКИ ГРАММАТИКО СИНТАКСИЧЕСКИЕ. См. грамматико синтаксические ошибки …   Новый словарь методических терминов и понятий (теория и практика обучения языкам)

  • § 242. СТИЛИСТИКО-СИНТАКСИЧЕСКИЕ ОШИБКИ — Нарушение связи между членами простого предложения Нарушение связи между подлежащим и сказуемым. Примеры ошибок: Выставка просмотр открыт ежедневно. Правильно: Выставка просмотр открыта ежедневно. Несколько ребят вышли из леса. Правильно:… …   Правила русского правописания

  • Ошибки речи — Портят выражение мысли и впечатление от речи и образа говорящего. См. фонетические ошибки, лексические ошибки, морфологические ошибки, синтаксические ошибки, фактические ошибки, стилистические ошибки, паралингвистические ошибки …   Энциклопедический словарь по психологии и педагогике

  • ошибки речи —    Портят выражение мысли и впечатление от речи и образа говорящего.    См. фонетические ошибки, лексические ошибки, морфологические ошибки, синтаксические ошибки …   Культура речевого общения: Этика. Прагматика. Психология

  • ошибки грамматические — Вид речевых ошибок, связанных с нарушением закономерностей и правил грамматики: 1) ошибки в образовании форм слов; 2) ошибки в образовании словосочетаний и составлении предложений. Одним словом, к ним относятся морфологические и синтаксические… …   Словарь лингвистических терминов Т.В. Жеребило

  • ошибки интерферентного характера — Речевые ошибки, связанные с отрицательным влиянием знаний родного языка на знания по изучаемому языку: гурзин (вм. грузин) (из речи чеченцев). О. и. х. проявляются на всех языковых уровнях. В речи учащихся чеченцев наиболее распространены… …   Словарь лингвистических терминов Т.В. Жеребило

  • ОШИБКИ — (1) алгоритмические нарушение логики решения задач (см. .), (2) О. инструментальные отклонения величин, полученных в ходе наблюдения и (см.), от истинных; обусловлены несовершенством измерительных (см.) и инструментов, а также неточностями их… …   Большая политехническая энциклопедия

Понравилась статья? Поделить с друзьями:
  • Синтаксические ошибки примеры предложений
  • Синтаксическая ошибка это что такое
  • Синтаксические ошибки примеры и исправления таблица
  • Синтаксическая ошибка это речевая или грамматическая
  • Синтаксические ошибки презентация