Подтвердить что ты не робот

Можете ли вы привести мне пример "Плохой разрыв строки перед"? "?

У меня есть сообщение об ошибке, что я не поклонник.

Bad line breaking before '?'.

Мне нравится

var s = (a === b)
        ? 'one'
        : 'two';

выглядит лучше. Крокфорд говорит:

Вставка с запятой может маскировать ошибки копирования/вставки. Если вы всегда ломаете строки после операторов, тогда JSLint может лучше найти эти ошибки.

Может кто-нибудь дать мне пример или два, о том, какие ошибки копирования/вставки он имеет в виду?

Update:

var s = (a === b)
        ? 'one'
        : 'two';

выглядит лучше, чем

var s;
if(a === b) {
    s = 'one';
} else {
    s = 'two';
}
4b9b3361

Ответ 1

(В соответствии с запросом мои комментарии повторно отправлены в качестве ответа:)

"Очевидная" ошибка копирования/вставки в примере, который вы показываете, - это скопировать первую строку:

var s = (a === b)

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

То, что, по моему мнению, г-н Крокфорд пытается сделать, состоит в том, что если вы намеренно разделите многострочное выражение таким образом, чтобы отдельные строки не были действительным кодом сами по себе, то, если вы случайно скопировали только одну строку выражение, скорее всего, приведет к синтаксической ошибке при вставке в другое место. Это хорошо, потому что синтаксические ошибки сообщаются браузером и/или JSLint/JSHint, и поэтому их легче найти, чем более тонкие ошибки, созданные, если вы копируете/вставляете строку, которая действительна сама по себе. Поэтому, если вы "всегда ломаете линии после операторов", как предлагает Крокфорд:

var s = (a === b) ? 
        'one' : 
        'two';​

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

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

Ответ 2

Самый известный пример:

function one() {
  return
  {
    val: 1
  };
}

alert(one()); // undefined

против

function one() {
  return {
    val: 1
  };
}

alert(one()); // [objet Object]

Ответ 3

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

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

Ответ 4

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

var a = 1, b = 1; // a === b, expect 'one'
(function(){
    console.log('called');
})
(a === b)
? 'one'
: 'two'
// called
// "two"