jslint - Должны ли мы терпеть неправильные определения? - PullRequest
4 голосов
/ 19 июля 2011

Обновление: выясняется, что это дубликат: JSLint: Использование функции до ее определенной ошибки

Мы недавно приняли jslint в нашем проекте, и, как и было обещано, jslint начинает ранить наши чувства. Но не только это, это заставляет нас подвергать сомнению довольно много правил, которые это имеет. Если честно, мне это как-то напоминает стиль программирования ANSI C. Вот один из них:

JS Lint: 'someMethodFoo' использовался до того, как он был определен.

Это происходит потому, что мы используем стиль кодирования сверху вниз: каждый файл сначала содержит наиболее важный метод. Реализация этого метода разбита на вызовы «sub» -методов, чтобы сохранить код чистым и хорошо структурированным. Это означает, что в большинстве случаев методы используются до их определения. На самом деле, я считаю это хорошей практикой, она делает код более понятным для будущих читателей и, следовательно, более легким в обслуживании.

Почему JS Lint хочет, чтобы мы перевернули его?

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

1 Ответ

1 голос
/ 19 июля 2011

Это просто соглашение, и на странице соглашения о коде не дается никакого объяснения, почему оно применяется таким образом

Все функции должны быть объявлены до их использования.Внутренние функции должны следовать за оператором var.Это помогает прояснить, какие переменные включены в его область.

Мы могли бы прочитать это как:

Все функции должны быть объявлены до их использования.Это помогает прояснить, какие функции доступны и какие функции они предоставляют.

Я думаю, что это рекомендуется, чтобы дать кому-то, читающему код, возможность понять, что делает функция перед ее использованием.Если вы предпочитаете нисходящий подход, я думаю, что это вполне приемлемо, и вы должны использовать флаг --undef, чтобы отразить ваши соглашения.В конце концов, главная цель инструмента - помочь вам:)

edit: этот вопрос о SO может помочь прояснить, почему он полезен в качестве предупреждения

...