Пояснення поганого переходу рядка JSHint перед помилкою "+"


125

Хтось може мені пояснити, чому JSHint скаржиться на таке,

window.location.href = String1
    + '#'
    + Sting2
    + '='
    + String3;

З помилкою, Bad line breaking before '+' error

Я розумію, що цю помилку можна налаштувати за допомогою laxbreak параметра , який описується як

Цей параметр пригнічує більшість попереджень про можливі небезпечні розриви рядків у вашому коді. Це не пригнічує попередження про стиль кодування першого комами. Для придушення тих, кому доведеться використовувати лаккому (див. Нижче).

Це пояснення досить лаконічне, і мені цікаво, чому переривання ліній таким способом вважається в першу чергу поганим чи млявим.

Майте на увазі, що я не намагаюся розпочати тут священну війну, я просто шукаю об'єктивну відповідь про те, чому люди JSHint вважають це погано, чи це просто переваги стилю, які вони вводять у свій літер (я думав, що JSLint був переконливий ліній), або якщо в певних перекладачах може перейти не так, коли цей шлях буде порушений.


6
Я думаю, що це просто "поганий стиль" згідно JSHint. Ви отримаєте такий же ефект, якщо будете використовувати провідні коми. Для читабельності я б принаймні переписав його зі знаком + у кінці рядка.
Іван

28
Бампер. Я думаю, що цей стиль є абсолютно найбільш читаним стилем, який можна використовувати з багаторядковими рядками, особливо при перегляді коду у вузькому вікні.
Ламбарт

12
провідні маркери, що продовжують оператор, допомагають вирівняти речі та візуально виразити продовження в лівій частині блоку коду, саме там можна було б очікувати, що можна знайти структурні елементи, особливо при швидкому скануванні. Це, безумовно, життєздатний і розумний, а об'єктивно не поганий стиль. Однак існує проблема цілісності коду для виконання цього правила, що прикро.
Адам Толлі

1
@AdamTolley я повністю згоден, і коли я запитав про це, отримав те, що здавалося підтвердженням, що це FUD. Це було розглянуто після "мета ефекту"; і ця перевірка, здавалося, підтверджує це, є життєздатним і розумним.
HostileFork каже, що не довіряти SE

2
На сьогодні ( JSHint 2.9.4 ) повідомлення про помилку - це оманливий розрив рядка перед "+"; читачі можуть інтерпретувати це як межу вираження.
RhinoDevel

Відповіді:


107

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

Ідея полягає в тому, щоб ви до кінця рядка дали зрозуміти, чи закінчується вираз на цьому, чи може бути продовжений наступний рядок.


6
Дякую за відповідь, обґрунтування помилки робить мене набагато простіше виправдати внесення змін, щоб задобрити JSHint.
Джеймс Макмахон

36
Автоматичне вставлення крапки з комою є розумним раціональним для цього стилю. Але коли вираз знаходиться в деяких дужках, попередження зберігається. І це мене сумує.
Бен Хайд

23
друге @BenHyde, і взагалі це легше читати при скаймінгу через код, щоб вести рядок з a +. на очах легше (і менш схильні до помилок) слідувати за одним стовпцем ліворуч, ніж стрибати на далекий кінець кожного рядка, щоб побачити, чи буде він доданий наступним рядком. навіть граматика менш незграбна: "Рядок 118 додається 117" проти "Рядок 117 буде доданий рядком 118."
worc

9
Особисто я ненавиджу додавання операторів (і коми) до кінця рядків, тому що я пробігаю повз нього. Мені простіше читати логіку в багаторядкових булевих висловлюваннях (&& або || на початку рядка, а не в кінці), і я можу швидко розповісти розділені комами списки, крім інших багаторядкових операторів, починаючи їх з а кома Слава богу за laxbreak
aaaaaa

2
@Barney Як ви поєднуєте занепокоєння щодо автоматичного введення крапки з комою з відповідями на моє дуже схоже запитання ? У чому полягає виправданий ризик цього формату? Для мене це має перевагу в розгортанні.
HostileFork каже, що не довіряйте SE

8

Jshint не позначить це як поганий розрив рядка, якщо ви використовуєте + перед розривом рядка на відміну від нового рядка. Так:

window.location.href = String1 +
'#' +
Sting2 +
'=' +
String3;

10
Це не дає відповіді на питання навіть на одну йоту. Чому так багато голосів?
Ламбарт

4
Можливо, але це один із способів вирішити цю проблему без необхідності змінювати налаштування jshint.
asulaiman

4
Це має бути коментарем, оскільки він насправді не відповідає на питання, але надає цінну інформацію.
tomtomssi

3

Не пряма відповідь на питання, але для тих, хто стикається з цим від Googling (як і я), хто хоче дотримуватися правила, але виправити попередження, наступне може бути корисним ...

При використанні Notepad ++ (наприклад, із плагіном JSLint) це можна виправити за допомогою наступного пошуку та заміни:

  • Знайти що: (\r\n|\n|\r)( *)\+
  • Замініть на: (включаючи перший і останній пробіл) +$1$2 
  • Режим пошуку: регулярне вираження

(Тестується лише в Windows, але регулярний вираз також повинен працювати з закінченнями рядків Unix або Mac OS.)

Для того, щоб зробити подібну річ для ||, &&, ==, !=, <=або >=замість того , щоб +використовувати це:

  • Знайти що: (\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • Замініть на: (включаючи перший і останній пробіл) $3$1 $2 

5
Мабуть, корисно для людей, які хочуть змінити форматування. Але він повністю не відповідає на (мається на увазі) запитання: "Мені цікаво, чому переривання ліній таким способом вважається в першу чергу поганим чи млявим".
Ламбарт

Справедливий момент, додали примітку вгорі, пояснюючи, чому я це розмістив.
Стів Чемберс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.