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