Давайте поиграем: вы видите фрагмент кода 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: