@ascalon: tu przynajmniej od razu widać co się stało, w js są rzeczy nad którymi czasem trzeba dobra chwilę pomyśleć żeby ogarnąć co ten chory system typów #!$%@? xd
1. Użyj metody, której nie rozumiesz działania. 2. Metoda zwraca prawidłowy wynik, zgodny z jej założeniami. 3. Bądź zaskoczony uzyskanym wynikiem. 4. Javascript taki zły i nieprzewidywalny!
@ZdeformowanyKreciRyj: odrazu wiedziałem co się stało, całe moje zaskoczenie polega na tym że funkcja sort domyślnie konwertuje tablicę intów na stringi, nie wiem jaka logika mogła stać przy projektowaniu jej w ten sposób.
pewnie taka, że w js w jednej tablicy możesz przechowywać różne typy danych, więc jak miałaby je posortować?
@Zavis: nie wiem #!$%@?, może na przykład rzucić wyjątkiem przy próbie porównania niekompatybilnych typów danych? Automatyczna konwersja na stringa to srogi rak. Python też jest dynamicznie typowany, też może mieć w tablicy różne typy danych, a mimo to nie trzeba wkuwać dokumentacji na pamięć żeby przewidzieć co zrobi jakaś podstawowa funkcja.
@Zavis: Nie da się w JS wykryć typu danych? Przecież mogło by sprawdzić przed sortowaniem jaki to typ i wykonać odpowiednie sortowanie względem danego typu. Jest to zachowanie raczej nieprzewidywalne bo w innych językach np. Java gdy odpalisz Arrays.sort() to dostosowuje się do typu (bo w sumie nie ma wyboru). Nie spodziewałbym się zmiany na siłę czegoś na String
W jaki sposób on te dane przechowuje w pamięci? ( ͡°͜ʖ͡°)
@Zelber: tak na logikę to sądzę, że jeśli tablica jest możliwie zbliżona do "prawdziwej" tablicy (jeden typ danych o znanym rozmiarze, znana długość tablicy) to jest szansa, że kompilator sobie to zoptymalizuje i gdzieś pod spodem będzie siedzieć "prawdziwa" tablica czy inny vector lub podobna struktura. Jak ten warunek nie będzie spełniony (a o
może na przykład rzucić wyjątkiem przy próbie porównania niekompatybilnych typów danych
@croppz: kiedyś JS był projektowany tak żeby był możliwie bezwyjątkowy i wszystkie operacje co najwyżej failowały "cicho", stąd takie a nie inne bzdurne zachowania i żonglowanie typami żeby to się "jakoś" spinało. Ten trend zmienił się jakiś czas temu, jednak na modyfikację starych zachowań jest już za późno.
@WydajnaJednostkaIndywidualna: że co xD TypeScript jest nadzbiorem JS, rozszerza JS o nowe możliwości (typy, dekoratory) ale nie zmienia starego API, bo jak niby miałoby to działać, skoro rola TS kończy się w momencie skompilowania pliku?
λ node
[2,1,10,5].sort()
[ 1, 10, 2, 5 ]
#programowanie #javascript #nodejs
2. Metoda zwraca prawidłowy wynik, zgodny z jej założeniami.
3. Bądź zaskoczony uzyskanym wynikiem.
4. Javascript taki zły i nieprzewidywalny!
@ascalon: pewnie taka, że w js w jednej tablicy możesz przechowywać różne typy danych, więc jak miałaby je posortować?
@Zavis: nie wiem #!$%@?, może na przykład rzucić wyjątkiem przy próbie porównania niekompatybilnych typów danych? Automatyczna konwersja na stringa to srogi rak. Python też jest dynamicznie typowany, też może mieć w tablicy różne typy danych, a mimo to nie trzeba wkuwać dokumentacji na pamięć żeby przewidzieć co zrobi jakaś podstawowa funkcja.
Jak w wielu innych językach.
@Zelber: tak na logikę to sądzę, że jeśli tablica jest możliwie zbliżona do "prawdziwej" tablicy (jeden typ danych o znanym rozmiarze, znana długość tablicy) to jest szansa, że kompilator sobie to zoptymalizuje i gdzieś pod spodem będzie siedzieć "prawdziwa" tablica czy inny vector lub podobna struktura. Jak ten warunek nie będzie spełniony (a o
@croppz: kiedyś JS był projektowany tak żeby był możliwie bezwyjątkowy i wszystkie operacje co najwyżej failowały "cicho", stąd takie a nie inne bzdurne zachowania i żonglowanie typami żeby to się "jakoś" spinało. Ten trend zmienił się jakiś czas temu, jednak na modyfikację starych zachowań jest już za późno.
Typescript...
Rzucenie wyjątku też nie jest pure ( ͡° ͜ʖ ͡°)
Żeby funkcja była czysta, musi być kompletna (tak się chyba tłumaczy total function), ale bez systemu typów o to ciężko