@alantan5000: To perlowe to tylko regexpy .. Da się nawet napisać za pomocą tego kalkulator.. W zasadzie każdym skryptowym obsługującym dobrze regexpy da się takie coś napisać :]
Poza tym perl nie różni się od innych skryptowców.
akurat n-wymiarowa wersja befunge z wieloma wkaźnikami (wielowątkowość) + zewnętrzne rejestry i rozwinięta o normalne opkody i obiekty jest jednym z ciekawszych sposobów implementowania bardzo skomplikowanych algorytmów, chociaż zarówno kompilacja jak i ręczna optymalizacja potrafią być trudne. Mam kolegę, który będąc na 4-tym roku informatyki chce pisać o tym magisterkę.
Wiele z tych rzeczy jednak dotyczy bardzo dziwnych przypadków brzegowych, tj. podane wywołania funkcji lub operatorów są strasznie dziwne, np. Math.max(3, {}). Normalne więc, że uzyskiwane wyniki też są dość dziwne. Z kolei to, czemu funkcje zachowują się dziwnie na Array(20) też ma pewne swoje jako-tako logiczne/wydajnościowe uzasadnienie.
Nie zmienia to jednak faktu, że w języku jest trochę błędów projektowych, które mogą wnerwić podczas pisania
Komentarze (14)
najlepsze
Poza tym perl nie różni się od innych skryptowców.
PS.
-Jak powstał perl?
-Ktoś pier*olął kotem o klawiaturę
@alantan5000: Oczywiście, że się da i tego nie neguję. Jednak są wygodniejsze języki ;)
Oto skeszowana wersja:
http://webcache.googleusercontent.com/search?q=cache:b37AojH7FnQJ:wtfjs.com/+&cd=1&hl=pl&ct=clnk≷=pl
Wiele z tych rzeczy jednak dotyczy bardzo dziwnych przypadków brzegowych, tj. podane wywołania funkcji lub operatorów są strasznie dziwne, np. Math.max(3, {}). Normalne więc, że uzyskiwane wyniki też są dość dziwne. Z kolei to, czemu funkcje zachowują się dziwnie na Array(20) też ma pewne swoje jako-tako logiczne/wydajnościowe uzasadnienie.
Nie zmienia to jednak faktu, że w języku jest trochę błędów projektowych, które mogą wnerwić podczas pisania
I właśnie funkcja isNaN tego NIE testuje.
Żeby to testowała, powinna działac tak:
isNaN(123) ---> false
isNaN(2.5) ---> false
isNaN(NaN) ---> true
isNaN("123") --> false
isNaN("blabla") --> false // przekazalismy string, a nie liczbę
isNaN({ foo: "bar" }) --> false // przekazalismy jakiś obiekt, nie liczbę
W rzeczywistości działa tak:
isNaN(123) ---> false
isNaN(2.5) ---> false
isNaN(NaN) ---> true
isNaN("123") --> false
isNaN("blabla") --> true // bo próbuje skonwertować string