Люди, изучающие JavaScript: Я буду использовать array. sorti) для сортировки этого списка чисел!" / it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)
Подробнее
Люди, изучающие JavaScript: Я буду использовать array. sorti) для сортировки этого списка чисел!"
JavaScript:
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
А однажды попалась и более всратая фигня:
Коммент: "эта хрень сортирует числа".
По факту сортировка для всяких статей и документов (не помню зачем). В "числа" включены и римские, типо: XVIII, IX и т. п.
Долго не мог понять, пока не поднял исходник.
читать исходники - полезно, интересно и даже необходимо, если речь о npm пакетах (там и фото автора могут быть, и левые текстовые файлы, инструкции по прокачке пресухи и тд)
Если в языке или библиотеке, функции, особенно тривиальные, требуют вдумчивого чтения документации, потому что ведут себя не так, как эти же функции в других языках, и не так, как было бы логично, то это яркий пример абсолютно уебанского дизайна.
В идеале, просто при взгляде на список функций какого-либо фасада чего-либо, должно быть однозначно понятно, что и как это что-то работает, и что оно умеет. И функции не должны вести себя не так, как может показаться из названия.
Так внутрь просто надо передать сравнивающую функию аля .sort((a,b) => +a - +b), после того как один раз наебнешься запомнишь на всегда. Задолбали эти мемы про джс когда на самом деле просто програмисты криворукие.
про принцип наименьшего удивления в мире js не слыхали?
в сотнях языков есть функция или метод sort. везде делает то, что ожидается. кроме сраного js.
вот нахуя?
причина в динамической типизации. Т.к. массив может содержать значения разных типов, то (по умолчанию) перед сравнением у сравниваемых членов вызывается toString, и сравниваются результирующие строки. Что бы изменить поведение по умолчанию, нужно передать ф-цию, которая будет сравнивать так, как тебе нужно.
ну потому что это стандартная ф-ция для сортировки. "lexicographically" - это частный случай. По сути sort - это ф-ция высшего порядка, которая как раз и принимает определенную пользователем ф-цию для сортировки.
не единственный.
можно было тупо бросать исключение, что типа сорту нужна лямда, передай ее.
и можно было сделать отдельную функцию на сортировку с преобразованием к строчке.
и не было бы такой фигни.
и можно было бы сделать более нормальные коллекции. массив именно чисел, в котором перекрыть сорт на привычный всем числовой.
и сами числа можно было сделать не такими ёбнутыми, но это уже совсем другая история.
запрограммировали поведения идиота. "мне что-то сказали сделать, а не понял что; сделаю, что умею, авось прокатит"
Проблема в том, что в js отсутствует напрочь такое понятие, как тип массива, или тип коллекции. И это выбешивает.
Там нет понятия "массив интов", или "массив строк", всегда "массив хуй знает чего".
Это был просто пример с другой типизацией. Я могу и другой привести: в python тоже любой тип приводится в str, у списков нет типа, но list.sort() все равно забросает тебя исключениями, если типы не согласуются. Так что "массив хуй знает чего" вообще не оправдание для такого поведения. :)
Тогда у неё не должно быть неочевидного поведения по умолчанию. Потому что оно нарушает принцип наименьшего удивления.
Проблема именно с этим сортом в том, что иногда он сработает для чисел правильно, а иногда - нет. То есть, легко проебаться при тестировании, но оно тихо, без ошибок, наебнет тебе логику в проде.
» 4 in l <- false
Programmer Memes
@iammemeloper
Without a doubt, the best programming language
11:09 PM -Sep28, 2023 121.6K ¡ews
» let l = [1,2,3,4]
<- undefined
» 0 in l <- true
» "0" in l <- true
Описание: Функция сортирует A-Z.
А по факту сортирует только 3 символа: A, -, Z.
Коммент: "эта хрень сортирует числа".
По факту сортировка для всяких статей и документов (не помню зачем). В "числа" включены и римские, типо: XVIII, IX и т. п.
Долго не мог понять, пока не поднял исходник.
В идеале, просто при взгляде на список функций какого-либо фасада чего-либо, должно быть однозначно понятно, что и как это что-то работает, и что оно умеет. И функции не должны вести себя не так, как может показаться из названия.
в сотнях языков есть функция или метод sort. везде делает то, что ожидается. кроме сраного js.
вот нахуя?
что мешало назвать функцию sort_lexicographically?
можно было тупо бросать исключение, что типа сорту нужна лямда, передай ее.
и можно было сделать отдельную функцию на сортировку с преобразованием к строчке.
и не было бы такой фигни.
и можно было бы сделать более нормальные коллекции. массив именно чисел, в котором перекрыть сорт на привычный всем числовой.
и сами числа можно было сделать не такими ёбнутыми, но это уже совсем другая история.
запрограммировали поведения идиота. "мне что-то сказали сделать, а не понял что; сделаю, что умею, авось прокатит"
что с чем смешали?
Там нет понятия "массив интов", или "массив строк", всегда "массив хуй знает чего".
Жс парадигма "втихую сделаем что попало" - это пиздец.
sortNum()
sortStr()
sortObj([A,B=>Int] comparator)
А не одна, по умолчанию делающая неинтуитивное приведение типов.
Проблема именно с этим сортом в том, что иногда он сработает для чисел правильно, а иногда - нет. То есть, легко проебаться при тестировании, но оно тихо, без ошибок, наебнет тебе логику в проде.
Вот, к примеру, кем надо быть, чтобы в java.util.Date нумеровать месяцы с нуля, а дни - с единицы?
Хорошо хоть с некоторых пор на опасных методах @Deprecated повесили...
а до этого все нормальные люди юзали йоду лет десять