Pull to refresh

Comments 16

Преобразование числа в строку

У чисел есть метод toString(), который более явен.


Преобразовать строку в число

Опять же, есть более явные parseInt() и собственно конструктор Number(), причём между этими способами есть различия.


Перемешать элементы из массива

Насколько я помню, функция сортировки должна быть детерминированной. Math.random внутри неё, как бы, не оч.


Сгладить многомерный массив

Только на один уровень. И лучше уж использовать новый flat() с полифилом.


Условия сокращённого вычисления

Выглядит, как вредительство. Код становится менее читаемым. Не надо выполнять работу за минификатор.

Спасибо, вы избавили меня от необходимости писать то же самое)

Да, статью стоило назвать 9 очень вредных советов по JavaScript.


У чисел есть метод toString(), который более явен.

Лучше использовать String(myVariable), этот вариант ни прикаких условиях не выкинет TypeError.


А так, тут все выглядит как вредительство. Особенно игрища с length, в обычном состоянии разработчик не будет ожидать изменения длины массива таким способом. Это работает, это стандарт, но это — экзотика.

Если хотите написать хороший код, из всех правильно функционирующих вариантов выберите самый многословный. Иначе есть риск, что кто-то когда-то что-то не поймёт.
Не знаю, было ли понятно, что это ирония.
Выглядит, как вредительство. Код становится менее читаемым. Не надо выполнять работу за минификатор.

А что мешает читать подобный код?

&& — вычисление выражения. Для условного выполнения кода есть, например, if и тернарный оператор. Использование && в качестве способа условного выполнения точно также добавляет в код неявности, как и большинство остальных примеров из статьи.

Почти все пункты — вредные советы, не делайте так.


1 — очевидный, 8-й — ОК, полезно, но тоже очевидно.
Для остального есть куда более правильные способы.

Пункт про перемешивание является вредным
Он неправильный(это перемешивание не истинно случайное), и медленный(O(n*lg n) вместо O(n))
habr.com/ru/post/358094

UPD: глянул в оригинал. При переводе потерян весь смысл в «Every day I'm shufflin'». Автор неспроста написал этот текст жирным
UFO just landed and posted this here
Если мы хотим очистить массив :)

let entries = [1, 2, 3, 4, 5, 6, 7]; 
console.log(entries.length); 
// 7  
entries = [];
console.log(entries.length); 
// 0 
console.log(entries); 
// []


А вообще статья странная. Некоторые примеры из неё у нас явно запрещены правилами eslint

Только вы не очистили массив, а создали новый и присвоили его переменной, так что получаете баг :(


Вот вам код, запустите в консоли:


let queue = [0,1,2];

const bomb = {
  arm(array) {
    console.log('THE ARRAY BOMB IS SET. CLEAR IT BEFORE TIMER EXPIRES OR YOU\'RE BANNED FROM HABR. CLEAR IT BY DOING DOCUMENT CLICK');
    this.array = array;
    this.tick(10);
  },
  check () {
    this.array.length === 0
  },
  tick (time) {
    setTimeout(() => {
      if (this.check()) return console.log(`BOMB HAS BEEN DEFUSED`);
      if (!time) return console.log(`U'RE BANNED`);
      console.log(`TIME LEFT: ${time}`);
      this.tick(time-1);
    }, 1e3)
  }
}

bomb.arm(queue);

document.addEventListener('click', () => {
queue = [];
console.log(`EXECUTED queue = []. Queue set to ${JSON.stringify(queue)}.`)
});

Почти половина о том, как делать не надо.


Совет 2. Приводит к двойном проходу по коллекции. Если использовать метод reduce(), то проблема решается и лаконичность не теряется.


Совет 3 и 4. Сократили количество букавок, но вот далеко не всем понятно, что это всего лишь операции преобразования в строку и парсинга строки. Но как говорилось выше — существуют более корректные стандартные языковые конструкции.


Совет 7. А за такой совет вообще по этапам нужно отправить, вместе с тем кто решит его использовать. Опять же, уменьшили количество букавок, но и сильно ухудшили процесс его отладки. А как известно — отладка это то, чем занимается разработчик большую часть того времени, когда не спит. И как правило, ищут и отлаживают баги те, кто их не создавал. Конечно, эта проблема не совсем актуальна для последних версий хрома, где можно поставить бряку внутри строки, но ведь есть ещё и сафари/файерфокс, и прочая нечисть, под которыми тоже нужно работать.

Совет 2. Приводит к двойном проходу по коллекции. Если использовать метод reduce(), то проблема решается и лаконичность не теряется.

Это вообще как?


Совет 3 и 4. Сократили количество букавок, но вот далеко не всем понятно, что это всего лишь операции преобразования в строку и парсинга строки. Но как говорилось выше — существуют более корректные стандартные языковые конструкции.

Это довольно распространённый трюк, кто его не понимает — виноват сам.

Sign up to leave a comment.

Articles