Я ^уаБспрЬ разравоггйик Это значит, он не может выполнять простые математические действия^». Что / javascript :: it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)
Подробнее
Я ^уаБспрЬ разравоггйик
Это значит, он не может выполнять простые математические действия^».
Что значит
'ЧауаБспр!-
разработчик"?
geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,it-юмор,javascript
чтоб сложить придется кастить в число. если ты не делаешь руками каст назад то в результате будет число. обратно в символ оно волшебным образом не превратится, но если с натяжкой, то будем считать что и '2' корректно.
Примени оптимизацию к выражению и ты поймёшь, почему я написал именно '2'. Хороший компилятор проигнорирует '2' - '2', а следовательно оставит '2'.
Остальное - вопрос интерпретации.
нет. отпимизация никогда не меняет результат. а результат это и тип в том числе.
даже если оптимизатор уберет лишние операции, то результатом будет число, а не символ.
все верно ) но речь о результате выражения.
в типизированном языке результатом будет комбинация тип+данные.
если ты начинаешь руками кастить результат, то это уже читерство и отсутствует в условиях.
мне даже стало интересно, 2 записан в виде текста, если сложить 2 текста то будет 22, а если вычесть 2(текст)? то вычтет все 2йки или только одни или вообще пошлет нахрен?
Оператор "плюс" не кастит строки к числам, потому складывает как строки. Получается 22.
Оператор "минус" кастит строки к числам, потому сначала он из результата сделает числа, а потом - отнимет. Получится 22-2=20
Автор глупый какой-то. При чём тут "простые математические действия"? Это особенности приведения типов. К математике в JS они не имеют отношения, которая вполне стандартна и пользуется тем же стандартом, что и все другие языки.
Потому что JS изначально задумывался как скриптовый язык для всяких свисто-перделок на интернет-страничках с минимальным порогом вхождения для того времени. Основной функционал страницы должен был обеспечиваться HTML'ем и CSS'ом. Оттого и проглатывание ошибок. Ну не завелся скрипт с падающими снежинками под Новый год, главное сайт магаза работает, потому что сделан на статичных страницах и формах.
К тому моменту, как народ начал пилить на JS более продвинутый функционал, язык уже был стандартизирован. А это означает, что при всем желании внести правки, нарушающие обратную совместимость языка, крайне затруднительно.
Зато для инженерной операции, которой является рисование пикселей на мониторе, такая точность вполне допустима. А ускорение, которое даёт такой подход, бесценно.
Ваши примеры не примеры, за точностью лезьте в NumPy
Лично я впервые с таким поведением столкнулся именно в JS и был крайне на него зол из-за этого. Понимание того настколько глубока кроличья нора пришло позже. А все почему? А потому что в строгих языках для конвертации double в строку будь любезен использовать функции наподобии sprintf, которая прячет часть проблем. Коменты выше с притензиями к точности явно показывают что я в этом плане совсем не уникален и должно пройти время пока прийдет осознание.
Практически весь доеб до JS строится на примерах, которые в реальной разработке не случаются.
Больше 10 лет прогаю в том числе на JS. Самый запоминающийся случай, когда я отхватил проблем выглядел примерно так:
function(){
return
42;
}
Такая функция возвращает undefined, а не 42, как предполагалось. Если написать так:
function(){
return 42;
}
то все работает нормально.
Это не косяк. Такое поведение задокументировано в спецификации (см. раздел Automatic Semicolon Insertion). Он связано с грамматикой языка, а именно с возможностью не завершать statement специальным символом ";", как этого требует например Си.
Python 2.7 ведет себя таким же образом.
Практически весь доеб строится на динамической нестрогой типизации. Которая, может, и имеет преимущества для хуяк-хуяк-и-в-продакшн-драйвен-девелопмент, но большом проекте приводит к боли. Потому что у тебя краши в рантайме, а не на этапе компиляции, из-за того, что где-то ты как-то объебался, и пришло не то, что ожидалось, что какого-то поля нет и у тебя undefined, а может ты вообще добавил поле, которого быть не должно. Ну и не только JS, я как-то также плевался, отлаживая руби. Но у жс она максимально всрато нестрогая.
Помимо этого можно добавить такие охуительные вещи, как прототипное наследование. Сука, совсем недавно в язык завезли что-то, хоть более-менее похожее на нормальный ООП. Ну, может там есть еще вагон каких-то приколов, я хз, на жс, к счастью, не пишу.
А я пишу. И довольно много и давно. Чувствую себя нормально.
Я говорю о том, что чистый JS предназначен для хуяк-хуяк-скриптик-снежинки (ну или для тех, кто уверен в своих силах и знаниях по JS). А если кто-то делает большой проект на чистом JS и терпит боль от динамической типизации, то это его головняк. Это как если писать десктопное приложение или серверную логику на ассемблере или на чистом Си и предъявлять им в вину пулеметную стрельбу по ногам. Для каждой задачи свой инструмент. Мне могут возразить, дескать, браузеры могут только в JS. На что я отвечу, уже давно есть трансляторы вроде TypeScript, в которых и статическая типизация, и ООП.
Ну, так, TypeScript - не JS, же, да? Это же другой язык, пусть и транслируется в JS. И тот же Kotlin, вроде, можно в JS даже транслировать. Про тайпскрипт я особо претензий не видел.
Я говорю о том, что нехуй на JS гнать за то, что в нем нет того, чего в нем быть не должно.
Люди пытаются писать большие, сложные проекты. В качестве языка разработки выбирают голый JS. Стреляют себе по ногам из пистолета системы "динамическая нестрогая типизация". Но при этом претензии предъявляют к языку. Не к архитектору или там к руководителю разработки, который выбрал не тот инструмент, а к языку! А давайте десктопные приложения на асме писать будем. А когда эти приложения будут падать из-за ошибок при работе с памятью, будем говорить: "Чего ж ты ассемблер такой небезопасный и вообще в классы не умеешь?!"
mathematics
visualbasic
haskell
rust
clojure
programming
matlab
lua
swift
scala
objectivée
golang
perl
lisp
esharp
sql
epp
python
ruby
java
javascript
php
TTT
IE
~1~1 r
_r r f
I I r
W
1 T
1 E
1 r
I I
I I
I I
W
1 E
1 E
0
I , ,1
100 150 200
contains word / 100
» 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
Отличный комментарий!