Давайте поиграем: вы видите фрагмент кода JavaScript и пытаетесь найти там ошибку. Это может быть, например, мертвый код, ошибка времени выполнения или какое-то неожиданное поведение.

Между прочим, эти фрагменты - не плод моего бедного ума, а реальный код некоторых проектов с открытым исходным кодом, упрощенный для игры.

Ответы сразу после кода, не обманывайте!

Ошибка №1

Ответ (строка 8)

Посмотрите на последнюю строку функции: мы обращаемся к элементу с нулевым индексом на formField. Эта переменная инициализируется либо relatedFieldId, либо null. В последнем случае доступ к индексу приведет к сбою выполнения.

Ошибка # 2

Ответ (строка 15)

Код rank = 3; никогда не выполняется, поскольку условие в строке 12 today > end всегда оценивается как истинное.

Ошибка # 3

Ответ (строка 5)

Посмотрите на Math.ceil, он используется в этой функции 2 раза, но один раз возвращаемое значение не используется.

Ошибка # 4

Ответ (строка 9)

Во второй раз, когда мы оцениваем условие typeof config === ‘function’ (строка 8), это условие всегда будет ложным, так как в строке 3 есть такая же проверка, а когда оно истинно, значение config изменится на null. Таким образом, у нас будет мертвый код в строке 9.

Ошибка №5

Ответ (строки 7 и 9)

Оба условия aLastAccessTime && !bLastAccessTime и !aLastAccessTime && bLastAccessTime никогда не выполняются, и код рядом с ними никогда не выполняется. Мы достигаем этих условий, только если первое условие aLastAccessTime !== bLastAccessTime ложно, поэтому aLastAccessTime и bLastAccessTime строго равны.

Это все, ребята!

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

Все эти ошибки были обнаружены статическим анализатором кода для JavaScript SonarJS. В этом инструменте анализ потока данных используется для обнаружения аномалий в выполнении программы без фактического выполнения кода. SonarJS работает как плагин IDE в SonarLint, а также в интерактивном режиме в sonarcloud.io, сервисе для непрерывного качества кода.

Узнайте больше о том, как работает SonarJS: