One morning you wake up find out you have access to God’s developer console. What’s the first thing you do with this power?
Discussion
♦ 154 + W 479 & Share
^ BEST COMMENTS ▼
I like forks • 5h
hehe3301 • 7h
sudo rm -rf oceans/*/contents/
*.plástic
sudo rm -rf people/*/*.cáncer sudo rm -rf v
Есть встроенная функция преобразования строки в инит: var x = Number("1000")
И кстати в любом языке есть свои язвы.
При чём:
1) Если ты реально хочешь сложить строку с числом, значит ты быдлокодер, и python тут не поможет
2) Как конкатенация плюс всё реже используется, так как давно уже появились template strings
Лично я ни разу не простреливал себе этим ногу. В js есть реальные недостатки. Например, два типа, которые, по сути одно и то же: null и undefined. Тем же самым NaN, наверно уже у каждого, кто хоть раз писал на js прострелена нога.
- Если ты складываешь строку с числом - это не значит, что ты быдлокодер, это значит, что имеет место произвольный unexpected input. Говоря проще - когда твою функцию заюзали не там где следует без дополнительной проверки инпута (ну не ты тут быдлокодер!).
- Весь мир сидит на легаси-коде. То, что ты в своих исходниках юзаешь string templates, нифига не означает, что твое красивое `${hui}${pizda}` какой-нить babel не превратит в простое hui + pizda, где прекрасно работает вышеозначенный unexpected input (тут я щас упростил, ну да идите нахуй).
- "Лично я ни разу не простреливал себе этим ногу." да ты просто джунище квадратно-гнездовое, по одному комменту видно
- "по сути одно и то же: null и undefined". Вот такие ко мне на работу сразу не попадали. undefined - это когда значения не существует (или существует, но равно undefined, то есть не существует). null - это в JS-машине строго определенный, единственный на всю JS-машину объект. Когда говорится, что что-то равно null, это значит, что дается ссылка на этот самый строго опреленный, единственный на всю JS-машину объект. За счет различия null и undefined организуются чейнинги, когда функция одновременно выступает и геттером и сеттером. И там еще до опизденения много нюансов.
- NaN изначально был задуман как результат выполения невалидной математической операции без эксепшна. Он задумывался как "Not a Number". Ну вот объект например - не намбер. Именно поэтому старая реализация window.isNaN({}) вернет true (ну реально, объект - не намбер, че доебались), а новая реализация Number.isNaN({}) вернет false, потому что проверяет строгое равенство другому глобальному на всю JS-машину значению NaN.
// Да, вот тут тоже красивая здоровенная картинка, чтобы всему реактору заходила и плюсцы ловила вместо идиотского коммента.
Но как же быть с приходящим JSON, наверное спросят нубские обсосы, мнящие себя дохуя мидлами, а то и сеньерами. А на этот случай есть геттеры/сеттеры, декораторы и даже целые построеннные на них библиотеки для проверки типов и не только типов. Да, на JS.
Бла-бла-бла, легаси. Ну давай, расскажи же о легаси в котором реально string templates не работает. Не, реально, давай, жги!
Насчет нул и андеф, ты прав. Тут чел не шарит. Тем не менее, при нестрогом сравнении null == undefined.
Я не говорю, что они технически одинаковые, я говорю о том, что с практической точки зрения дизайна языка существование undefined достаточно спорно. Есть несколько исключительных ситуаций. Но в целом, что бы по большому счёту изменилось, если бы вместо undefined был бы null? В остальных языках с этим никаких проблем.
а пока микрософт не пришел и не сделал его, вэбдевы жрали говно и нахваливали
Первые попытки создать клиент были еще на Сильверлайте и Флэше. Им сильно не хватало разметки и интеграции с браузером, но тем не менее.
> Вот такие ко мне на работу сразу не попадали
Не дай бог с тобой в одном месте работать. Спасибо, я теперь хорошо представляю психологический портрет людей, работы с которыми надо избегать.
Ты сам читал, что ты тут написал?
> не означает, что твое красивое `${hui}${pizda}` какой-нить babel не превратит в простое hui + pizda
Какая там разница, что у babel под капотом? Думаешь, его такие же спецы писали, как ты?
``${var1}${var2}` там в худшем случае превращается в `"" + var1 + var2;`.
> функция одновременно выступает и геттером и сеттером.
Это как? И при чем тут null и undefined?
Я могу только догадываться, что речь идёт о функции, у которой поведение различается в зависимости от количества переданных аргументов. Например:
doSomething(undefined) // вернёт значение
doSomething(null) // установит значение в null
Только тогда не понимаю всё равно, при чём тут chaining.
> там еще до опизденения много нюансов.
Опиши ещё хотя бы один нюанс, который можно в здравом уме применять на практике
> NaN изначально был задуман...
Какая разница как реализован NaN, когда речь идёт о том, что реализация математических операций пропускает значение NaN, которое в реальной программе не может являться ожидаемым?
- Какая разница как реализован NaN.
_______________________
Огромная,- NaN, это результат вычисления с плавающей точкой, который не является числом.
Другой пример: NaN, может быть вычислением (численным результатом), которое выходит за рамки классической нумерации объектов и их частей, с учетом характеристик в сравнение...
NaN, может быть "додекальен в хуйсоснявой стемени", на отображение которого не хватет памяти устройства.
NaN, это число, которое не является числом, но уж точно это не строка...
+версия "soclear".
ps: кстати, еще есть QNaN и SNan ))
Не понимаю тебя, опиши хоть один сценарий или операцию где деление на нуль имеет место быть... как бы при деление на нуль, математика нам говорит: тут наши полномочия все.
Кстати да, даже современные смарт карты типа mifire имеет ограниченное кол-во памяти, хер ты там на одном килобайте передашь стринг "эксепшн дивижн бай зиро", тупо не хватит пямяти.
Когда в первые познакомился с технологией смарт карт, первое что меня настигло так это проблемы с меппинга блоков памяти (ограниченный объем) , пришлось идти на хитрости, типо как инклудить файлы с процедурным кодом, чтобы почистить блоки памяти ( не смогу сейчас четко сформулировать, тему ммапинга блоков памяти в с++ пропустил и так до сих пор не усволил )
https://securityrussia.com/blog/mifare.html#proizv_kart
Тебе надо привести более конкретные примеры, чтобы ты осценил на сколько это ценный тип данных и как он может в тех или иных ситуациях стать решающим занчением-типом.
Иду спать, завтра пофантазирую на космическую тему, NaN решил судьбу человечества )))
При делении любого числа на 0 ты получишь ±Infinity в зависимости от знака нуля и знака числа.
Прочитай сначала стандарт IEEE 754, а потом уже говори про NaN.
Да ты прям как я, человеку диагноз по посту ставишь. Эксперты реактора, мы такие, ага.
> Какая там разница, что у babel под капотом? Думаешь, его такие же спецы писали, как ты?
``${var1}${var2}` там в худшем случае превращается в `"" + var1 + var2;`.
Ну в посте своем я знал, что до этого доебутся, поэтому там же превентивно послал нахуй.
> Только тогда не понимаю всё равно, при чём тут chaining.
Ладно, отходя от местячковых срачей ради лулзов и говоря более предметно, внизу отписал человеку конкретный пример. Посыл в том, что инструментарий выбирается под задачу, а не наоборот. Бывают случаи, когда сильно важно различать null и undefined.
Это молодое поколение которые не считают нужным учить основы, они хотят ебашить все на фреймворкахне считают флопсы, они никогда на коленке не собирали серваки с 64ram, это ебанные "белоручки"...
Помню историю, решил как-то выебнутся в одном дев-комьюнити своим студенческим проектом- "интернет магазин" ( с нуля на С#, на чистой процедурке (умел все- не доебешься!)).
Пишу: мол смотрите, вот тут душа, писал два года- запускаешь на любом калькуляторе, работет молниеносно, не требует посредников-интерпритаторов типо апача.
В скором времени пришел ответ от какой-то сопли: мол я это функционал подниму за неделю с помощью фреймворка "laravel'e", и мол ты лох и старый пердун, и это сугубо твои личные проблемы.
Не хочу сейчас расписывать пост-ковер всех тех мыслей и чувств что я испытывал в тот момент- я просто хочу сказать, что я очень благодарен всем людям в истории человечества, которые так или иначе были приближены к точным наукам, тем кто внес свой вклад в научный процересс, который подволил нам жить в этом прекрастном мире!
ps: Заметил что старая школа, стала активно перебегать на Golang, кто, что думает на этот счет, все-таки процедурка это сила?)
А с ларавэл поднимут за неделю, покажут демо и потом те же 2 года будут допиливать.
Я же писал код еще в студенческие годы (13 лет назад), и суть выебона заключалась в том, что созидал сущность и функционал с нуля, - это творческая работа в первую очередь, и безмерный труд. + мой код конечно же отработает логику быстрее чем самый оптимизированный проект на ларавеле в 1000 если не в 10 000 раз))) - но это фигня, с точки зрения доработки, безопастности мой проект это барахло )))
Кстати, я сам пишу на Ларавеле уже как два года, так что и с моделью "MVC" знаком давненько)) так сказать, приспосабливайся или умри, но как сказал, все олды бегут на Golang и меня это передергивает)
Раньше конкуренция была слабже и важнее было побыстрей хоть что-то выкатить, а сейчас важней выкатить что-то получше/побыстрей.
т.е. есть спрос, а спрос порождает предложение (константа экономики).
Так что все логично друг :)
прошли мимо всего опыта предшественников и типа это хорошо
в итоге уже их допинали местами сделать дженерики, от которых они отбивались. эксепшены тоже допинают.
и останется язык с родовыми травмами
В общем, я встроил счетчик прямо внутрь thttpd (был такой сервер) под фряхой, а записи шли кратными 512 байт, чтобы попадать в размер кластера на жестком диске. Никаких СУБД, разумеется. Почти год возился. Админка, хуинка, все дела.
Сейчас я тот же функционал ебану за пару недель. И это будет NodeJS + Postgress (или C# + SQL Server, или Java + MongoDB), причем в контейнере. А вебморду на Ангуляре + Материал (или Vue). И будет охуенно. И мне совершенно похуй на оверхед - железо копейки стоит.
Технически разное, а с практической точки зрения одна фигня, что ты такого полезного будешь делать с null ? Пример этого чэйнинга в студию.
>> // Да, вот тут тоже красивая здоровенная картинка, чтобы всему реактору заходила и плюсцы ловила вместо идиотского коммента.
Он не поленился вставить картинку, а ты доебался до человека по пустяковой причине.
С чейнингом все просто, вот пример кода настраиваемых виджетов (проект старый, писался на es3, подход к чейнингам был спизжен из сильно модных тогда jQuery и d3):
widget.title().text('My title').fontColor('red');
widget.title() - вернет инстанс тайтла, дальше этому тайтлу установится текстовое значение и цвет шрифта. Здесь методы text(value) и fontColor(value) отрабатывают как сеттеры, и оба возвращают title.
А если написать widget.title().text(), то здесь text() отрабатывает как гетер и вернет строку "My title".
Теперь самое интересное - а как сбросить установленное значение на дефолтное? (задача такая встала, когда писали UI для настройки виджетов).
Да все просто: widget.title().text(null).fontColor(null)
И вот именно в этом месте и надо различать:
- или у тебя метод вызван без параметра и должен отработать как геттер (параметр - undefined)
- или тебе пришел null, метод должен отработать как сеттер и сбросить значение на дефолтное
- или тебе пришло не null значение, метод отрабатывает как сеттер, устанавливает новое значение.
Как-то так. Щас конечно еще понабегут, но это вот для примера, где надо строго различать null и undefined.
Одна функция мутирует данные на месте и делает 2 или больше разных вещей в зависимости от неочевидного ньюанса. Сейчас всё меньше кода с таким подходом.
просто делать, просто и быстро учиться и ... бараьанная дробь ... разработчики дешевле стоят, ибо их легионы. бизнес порешал.
отсюда и шуточки, что такие спецы не разобрались в основах языка и их триггерит, то что их ожидание не совпадает с реальностью.
и, да, для браузера нет альтернатив. онли js.
ява и яваскрипт - два вообще разных языка. общего у них примерно нихуя
один запилен мудаками в спешке с использованием наркоманских необкатанных концепций, потом другими мудаками тоже в спешке принят как стандарт вэба.
а другой, хоть и многословен, но сделан по уму и имеет самую развитую экосистему годных либ и тулзов
и я даже не на пол пути к дзену ....
за 9 лет ты этого не заметил, пиздобол?
Я на js не пишу но...
Какого хуя к строке прибавляют и вычитают инт?
В чем проблема привести всё к одному типу?
Тут тега приколы_для_итдаунов не хватает.
Либо я вообще не догнал в чем прикол
А с минусом такое не прокатит, тупо нет операции чтобы вычитать что-то из строки, поэтому программа пожимает плечами и решает "значит строку как число прогоним".
const arr = [];
if (arr) console.log("[] is truethy");
if (arr == false) console.log("however, [] == false");
Для примитивных типов разумеется, а для объектов и массивов есть isEmpty хелпер из lodash.
На языках с динамической типизацией (например, JS) можно писать. Умелый кодер легко бы подметил представленные на картинке ошибки. Однако, проверка типов руками - на мой взгляд довольно безрадостная работа, и при недостатке внимания довольно легко допустить ошибку. С другой стороны, ту же работу может выполнять компилятор языка со статической типизацией. Собирая код, он будет проверять типы автоматически, и, как мне кажется, будет справляться с этой работой намного лучше человека. Так почему же не воспользоваться его возможностями, и использовать в разработке язык со статической типизацией? Выигранное время можно направить на другую конструктивную работу - например, размышления на тему "а зачем я вообще пишу этот код?" .
Пытался запустить штук 7 репозиториев с питоновским кодом где таких "детских" ошибок с типами не должно быть, ага, ни один не заработал.
Питонисты забывают даже про то чтобы "заморозить" используемые пакеты в requirements, после того как что-то обновилось код больше не запустить.
Про отсутствие тестов вообще молчу.
Итого "лёгкий" и продуманный язык где сложнее выстрелить себе в ногу воспитывает говнокодеров, а убогий JS рулит вэбом и не только.