Когда я только начал по-настоящему вникать в разработку, я пошел по пути самообучения. У меня все шло очень хорошо, пока я не переехал в другой штат. Оказывается, это на какое-то время полностью разрушает любое подобие рутины, и все, чему вы научились, просто испаряется в течение года. В любом случае, я был один в этом путешествии, поэтому каждый раз, когда мой код работал, я двигался дальше. Работает, что еще делать? Я не могу реорганизовать свой код, если не знаю другого способа его написать.

Одним из примеров этого является то, что я учился сортировать массивы в JavaScript. Я подумал, что должен быть способ, не связанный с ручным переназначением индексов или чем-то еще.

Мой процесс «обучения» проходил примерно так:

  • Google «как сортировать массив javascript».
  • Решение, которое я нашел на StackOverflow: numbers.sort((a, b) => a-b)
  • Думаю про себя: «Э-э… ​​думаю, я просто попробую».
  • Скопируйте + вставьте код и соответствующим образом измените переменные.
  • О, круто, это работает.
  • Переходите к следующему.

Слишком долго это был мой порядок операций для сортировки, фильтрации, сокращения, сопоставления и всего остального. Помню, я бегло читал о стрелочных функциях, но никогда не уделял им должного внимания, потому что они мне никогда не были нужны в моей работе. Это привело к тому, что я увидел numbers.sort((a, b) => a-b) и отмахнулся от него как от технической тарабарщины. Из-за глупой маленькой стрелочки Сортировка 101 пролетела прямо у меня над головой. Поэтому, когда все это пришло ко мне на этой неделе, я почувствовал, что должен немного глубже погрузиться в то, что, черт возьми, на самом деле делает функция сортировки, теперь, когда я знаю, что это не просто компьютерная блевотина.

Теперь, когда я знаю, что использую стрелочную функцию, я переведу ее в полную форму:

numbers.sort( function(a, b) {
  return a - b;
});

В общем, анонимная функция с двумя параметрами, a и b. Функция вычитает b из a и возвращает результат. Довольно просто, правда?

Но подождите, а где остальное? Согласно MDN, это все, что вам нужно для сортировки массива в порядке возрастания. Хотите вместо этого отсортировать по убыванию? Просто используйте b-a вместо a-b . Сделанный. Эта простота является причиной того, что большинство людей сокращают ее до встроенной стрелочной функции. На самом деле, параметр даже не требуется. По умолчанию элементы массива преобразуются в строки, а затем сортируются по порядку единиц кода UTF-16. Я отказываюсь погружаться настолько глубоко.

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

Просто повторюсь, в этой анонимной функции не происходит абсолютно ничего, кроме простого вычитания. Основная часть работы встроена в метод сортировки. Говоря простым языком: «Если aминус bотрицательно, то aменьше b, поэтому поставьте a перед b». И наоборот, конечно.

Приступая к сути фактической функции сортировки, я решил подвести черту. Главный вывод для меня заключается в том, что стрелочные функции не являются тарабарщиной, а функция, передаваемая в Array.sort(), только оценивает, является ли разница между двумя элементами массива положительной или отрицательной. Array.sort() сделает все остальное. В этом суть.

Спасибо, что пришли на мое выступление на TED.