Чому я ненавиджу web розробку і що мені в ній не подобається
Оскількіи з devua.co її видалили, на codeguida.com не опублікували хочу прорекламувати свою статтю.
web-hate.tumblr.com
txti.es/web-hate
Давайте, ображайте мене.
Оскількіи з devua.co її видалили, на codeguida.com не опублікували хочу прорекламувати свою статтю.
web-hate.tumblr.com
txti.es/web-hate
Давайте, ображайте мене.
Один парень писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.
Your daily reminder about JavaScript:
i.snag.gy/5GORIE.jpg
-10 хвилин мого життя
Шо мне не нравится, так это то шо нету ИДЕИ для жс+пхп. Когда пишешь на яве, идея сама генерир половину кода. Тут клас, алт+ентер и 20 методов сет-гет. Потом второй клас и еще 20 методов. В джаваскрипте и на пхп приходится это все руками фигачить.
Кто-то кого-то обзывал.
Кто-то про фуллстек вспомнил.
Вспомню и я, будучи в ужасе от встреченной какашковакансии jobs.dou.ua/...evelopex/vacancies/48377
Фулстек — всем фулам стек. В вебе такое бывает?
Full-stack Developer (C# .Net, Android or iOS)
Почитал статью, вспомнил, как изучал Java и после этого — пытался разработать SPA для REST-сервиса, взяв сравнительно простой фреймворк — Backbone. До этого работал несколько лет программистом 1С 8, регулярно поливаемого тут грязью время от времени. После простоты разработки в 1С 8 что т.н. обычных форм, что т.н. управляемых, веб-разработка действительно кажется каменным веком, когда простейшие по сути элементы UI можно конструировать и отлаживать чуть ли не днями.
когда простейшие по сути элементы UI можно конструировать и отлаживать чуть ли не днями.
A можно и минутами, не?
1C-ник не може відрізнити Java від JavaScript. Не дивно, що з вас всі сміються.
изучал Java и после этого — пытался разработать SPA для REST-сервиса
Очень смешно. Начитавшись вакансий с заголовками Full stack Java engineer или «full stack приветствуется», мне захотелось посмотреть, что собой представляет современная фронтенд экосистема с JavaScript, CSS и всеми этими фреймворками. Хотя теперь понимаю, что полноценный full stack в контексте Java как бэкенда — это такой же оксюморон, как морская свинка и т.п.
Так у чому ваші претензії, що складно розібратись у JS-фреймворках, чи що не можна писати фронтенд на Java? (насправді можна, з іще одним фреймворком gwt)
У меня нет претензий (да и кому я могу их предъявить?). Своим изначальным комментарием я всего лишь выразил согласие с выложенной статьёй (всё не читал, правда, в силу отсутствия соответствующей квалификацией), что современная веб-разработка опирается на весьма сомнительный базис.
А я брал С++ Motif и писал под X11 интерпретатор ASN.1 для SMI SNMP. И после этого JS и скорость разработки на нем кажутся просто фантастическими. Все познается в сравнении. А 1С — это не язык — это конструктор для бухгалтерии. Там возможностей меньше чем в паскале 90х годов. А редактор форм к программированию отношения не имеет.
А 1С — это не язык
это таки вполне себе VB — движок у мелкософта лицензирован))
возможностей меньше чем в паскале 90х годов
это говорит о том что 1с вы видели последний раз именно что в
А редактор форм к программированию отношения не имеет.
а формошлепство во фронтенде имеет?
В web-е не особо люблю фронтенд. Наверное по причине, того что фИговый дизайнер.
ЯваСценарій головного мозку
— это пять))
Посил вірний, але читати досить тяжко.
Вміння писати так, щоб читалося легко — воно окреме і йому вчаться окремо.
Але не здавайтесь.
Не подобається Frontend?
Запрошуємо до темного світу Backend.
Хочете щоб все по фен-шую? Java вам в руки.
Ну а ні, то мобільні платформи або десктоп.
А ще можна залізячки програмувати.
А desktop все ще жиє? І що треба знати? C#? C++? І що в основному пишуть?
Звичайно, що живе. Далеко не все можна і зручно на телефоні або планшені робити. Що треба знати? На скільки знаю, в більшості випадків Java (бо ж кросплатформенно), можна й C#, С++ уже екзотика для екстремалів, але там, де треба берегти ресурси заліза саме то.
Якщо цікавить, створіть нову тему з питаннями про десктоп, нехай вам розкажуть ті, хто ним займається.
1 > "" => true
-0 == 0 => true
так, це мінус нуль, в js все можливо
[] == ![] => true
а це навіть круто виглядає
1 > null => true
-0 == 0 => true
1 > null => true
ну так даже в С так же само будет (если проигнорить ворнинг :) )
1 > "" => true
А тут просто приведение типов
Чомусь ця катастрофа тiльки в «мiнусах JS», а не в реальному життi :)
я лише виду до того, що в js велика кількість проблем і з ними треба навчитись якось жити
Ну так, если нормально кодить и не выделываться сложением чисел со строками/массивами/обхектами, не приводить все подряд к строке и т.д., то 90% этих проблем можно и не заметить
о так, для співбесід саме то, написав якусь фігню і з розумним виглядом питаєш, що з того вийде :)
ну и что нелогичного в том, что пустая строка при приведении к числу конвертируется в 0?
typeof [] => «object»
typeof {} => «object»
але чомусь так
Number({}) => NaN, що логічно, а Number([]) => 0
і такого в js тонна
тут ціла таблиця всіх перетворень
getify.github.io/coercions-grid
typeof [] => «object»
typeof {} => «object»
ну и правильно, 6 типов данных.
Number({}) => NaN, що логічно, а Number([]) => 0
опять логично:
что у объекта, что у массива, унаследованного от объекта нет valueOf(), ведь однозначно нет соответствия числу, значит приводится через toString(), соответственно результат «[object Object]» и "" (в Array собственный перекрытый метод toString) и если их преобразовать в число, а преобразовываются они уже внутри Number функции, т.е первое даст NaN, второе как пустая строка будет 0. Это логично для языка с нестрогой типизацией, что то на выходе должны получить и правила преобразования должны быть одинаковы
на мою скромну думку в цих перетвореннях більше проблем ніж користі, цим хворіє більше js, в python такого не має, але це теж динамічна мова
в цих перетвореннях більше проблем ніж користі
Ну Вас же или кого то еще не заставляют использовать неявные приведения? Что полезного человек ожидает скармливая Number({}) или делая []==![]? Не допускайте такого вот и все, кто заставляет преобразовывать объекты к примитивам или сравнивать их с примитивами? Никто... Работайте «влоб», без выпендривания со сложными приведениями, если чего то не понятно вот и все. Проблемы эти надуманные.
так, кожного дня виникає необхідність оперувати масивом як числом.
і кожного разу ця поведінка з приведенням вибішує.
хоча... ні, пофіг, ніколи не було потреби у такій операції.
+new Date()
я таке в коді не раз бачив
null + null + [] таке теж може бути легко і тут цілий ребус треба розгадати, щоб зрозуміти результат
це як на мене є великим недоліком мови
+new Date()
ага, это шорткат для .valueOf(), который для даты вернет timestamp.
но необходимость этого встречал только при сортировке списка дат.
и исходная проблема была в том, что Array.prototype.sort() без параметров сортирует по строковому представлению и Tue
т.е. это не из-за неявного приведения типов, а из-за спорного решения в дефолтной реализации сортировки.
і тут цілий ребус треба розгадати
хм. вообще-то нет. «нет тз === результат хз». у меня нет никаких предположений, когда я суммирую массив с чем бы то ни было. тем более, когда есть отдельный метод .concat()
в каких случаях у вас вообще получается такой случай?
не логичнее, ибо в js, как в языке с динамической типизацией, все типы по максимуму должны приводится без лишних вопросов и без бросания исключений, если что то хоть как то привести можно, то должно приводится. Раз напрямую в число массив не привести, то взять его строковое отображение это вполне разумное решение. Что хорошо в том чтобы получить на выходе NaN? Дальше с ним работать не как. Это практически нештатная ситуация, т.е якобы исключение.
объекты преобразовываются через свое строковое отображение, что дает метод toString(), в самом объекте, либо в его цепочке прототипов, а это будет Object.prototype.toString. Соответственно это поведение для объекта можно поменять, чисто теоретически. Можно добавить ему метод valueOf можно перекрыть метод toString
let objZero= { toString: function(){ return "0"; } }; let objZero2= { valueOf: function(){ return 0; } }; objZero+"" ==> "0" objZero.toString() +objZero ==> 0 parseInt(objZero.toString()) - Хотя не совсем parseInt objZero2+"" ==> "0" (objZero2.valueOf()).toString() +objZero2 ==> 0 objZero2.valueOf() Number(objZero2) ==> 0 //not NaN
не логичнее, ибо в js, как в языке с динамической типизацией, все типы по максимуму должны приводится без лишних вопросов и без бросания исключений, если что то хоть как то привести можно, то должно приводится
Такое работает, пока 1 чел чего-то там пилит на коленке. Но быстро разваливается и превращается в кучу г., когда кодописанием на проекте занимается хотя бы 5 чел (не говорю уж, о проектах в
С другой стороны, в броузере ничего сложного и не запустишь. T.к. на мелком коде броузер превращается в тормознутое и выжирающее всю доступную память г., а на чём-то крупном просто умирает. Соответственно, можно мелкие броузерные решения писать всякими недоязыками.
С другой стороны, в броузере ничего сложного и не запустишь. T.к. на мелком коде броузер превращается в тормознутое и выжирающее всю доступную память г., а на чём-то крупном просто умирает. Соответственно, можно мелкие броузерные решения писать всякими недоязыками.
Ну так от... Тонкий клиент, тонкий клиент... А закінчилося толстым броузером.
Нізя щоб броузер юзеру бяку показував — будемо бяку ігнорити. А JS-бяку будемо в консоль писати — все одно юзер про консоль не знає. :) А коли цієї бяки дофіга набереться, можна і зависнути — все одно у юзера 10 плагінів і 50 вкладок відкрито, хз чому броузер завис. ;)
Но быстро разваливается и превращается в кучу г., когда кодописанием на проекте занимается хотя бы 5 чел
Ну если эти 5 человек УГ в js, то ничего другого на выходе и не предвидится, собственно как и на проекте с любым другим языком. В js якобы низкая планка входа, по этому набежало все кому не лень, прикрутил слайдер на страницу- все теперь он js разраб, ни базовых алгоритмов, никакого профайлинга, косо криво и погнал...
Движки JS за последние года в производительности очень выросли, но не достаточно для того чтобы ускорить еще более убогий, нежели ранее, клиентский код. Всякие Ангуляры съедают подросшую производительность намного быстрее, чем она растет.
С другой стороны, в броузере ничего сложного и не запустишь.
да ладно, и много пытались? Еще 3 года назад видел интерпретатор flash js. Но Вам возможно надо декодирование H.265 на js в браузере? А точно, и такое есть
Вообщем, толстовато как то...
ибо в js, как в языке с динамической типизацией, все типы по максимуму должны приводится без лишних вопросов и без бросания исключений
Только при чем тут динамическая типизация? Динамическая типизация вполне может быть строгой. Неявное преобразование типов — это таки кака, без вариантов практически... Другое дело, что человек зачем-то прикопался к чуть ли не самому вменяемому примеру такого преобразования.
Только при чем тут динамическая типизация?
Имелось ввиду, что раз она динамическая, то очень много неявных преобразований, и всякая рутина с типами должна быть сведена к минимуму, т.е как есть- так есть...в то что преобразовали и хорошо :) надеюсь, поняли о чем я :)
в js повно проблем, це я і хотів сказати
саме тому було так багато способів його замінити
це і actionscript, coffeescript, clojurescript а тепер і typescript
в js повно проблем, це я і хотів сказати
преимущественно эти проблемы рисуются у новичков, которые пришли с другого языка и они видят что в js много что не так работает, и много чего, как им кажется нет, того к чему они привыкли, по этому каждый решает проблему, которую они видит со своей колокольни.
і actionscript, coffeescript, clojurescript а тепер і typescript
и жив пока только typescript :) Хотя и он тоже больше создает проблем, чем решает- все ошибки с данными всплывут при первом же автотестировании CI, если код нормально обрабатывает валидацию данных. А не получили что то непонятное в фунцию, нифига не проверили погнали дальше код.
Имелось ввиду, что раз она динамическая, то очень много неявных преобразований
Вы путает динамическую/статическую типизацию со слабой/сильной типизацией.
Статическая типизация: тип объекта проверяется при компиляции.
Динамическая типизация: тип объекта проверяется в рантайме
Сильная/слабая типизация: это целый спектр того, насколько легко и неявно приводятся типы в языке
Например: C — это слабая статическая типизация (автоматическое приведение плавающей точки к целочисленным типам и наоборот и т.д.), C++ — это чуть более сильная (но все равно слабая) статическая типизация, Python — сравнительно сильная динамическая типизация, phpjs — слабая динамическая типизация
не логичнее, ибо в js, как в языке с динамической типизацией, все типы по максимуму должны приводится без лишних вопросов и без бросания исключений, если что то хоть как то привести можно, то должно приводится.
[citation needed]
бо NaN це набагато логічніше,
Ничего подобного"42" + "" === "42"
— вопросов не вызывает?Number("42") === 42
— вопросов все еще не вызывает?Number("42" + "")
— ... надо продолжать, или «ассоциативность придумали трусы»? :)
Вообще к неявному преобразованию вопросов тьма, но касательно преобразования пустой строки в ноль в данном контексте вообще-то не должно быть вопросов...
надо продолжать, или «ассоциативность придумали трусы»? :)
А при чём тут вообще ассоциативность в данном случае?
но касательно преобразования пустой строки в ноль в данном контексте вообще-то не должно быть вопросов...
Они есть, и настолько, что лучше бы этого результата не видеть.
А при чём тут вообще ассоциативность в данном случае?
Да не при чем, конечно же. Имел в виду алгебраическую аддитивность, и чисто с целью пофлеймить на тему «хоть какой-то логики», а когда обратил внимание на косяк, править сообщение уже было нельзя...
Не знаю кто более упорот, тот, кто дизайнил поведение javascript, или тот, кто пытается его оправдать на форуме.
Не знаю кто более упорот, тот, кто
либо кто то просто унаследован от класса TGenericHater, отсюда все проблемы... причем в любых вопросах
Не, та скорее имплементит интерфейс IHater, это у вас плоды долгого юзания дельфы))
> Давайте, ображайте мене.
Если вы пишете код также как и на украинском языке, то Вам лучше на жизнь зарабатывать столяркой.
-
Задумка с интерфейсом под редактор формул — mymath.in.ua (рутина дальше символов не пустила) + поиск легковесного под красивые формулы jsfiddle.net/mymath/dqthyayc
-
Еще один неосилятор который не смог ни в джаваскрипт, ни в нормальную разметку текста (абзацы и параграфы для слабаков, да).
Читать не рикамендую.
... но чтобы высказать эту глубокую (нет) мысль вы почему-то пошли не в какую-нить олдскульную эху, которой не касалась рука богомерзкого формошлепа, а на доу. Что очень похоже на то, как если бы лежащий на операционном столе пациент под местным наркозом рассказывал бы хирургу о «всепобеждающей пользе современной уринотерапии»...
Висловлюю подяку livecoding.tv. Закликаю заходити на тамтешні стріми і траллірувати вебщиків питаннями про багатозадачність, асинхронність, класи і прототипи, чим proto відрізняється від prototype чи як щось зробити без jQuery.
спасибо, а то не знал чем заняться на выходных
Чому графоманство? І де йому ще бути? Визнаю, так собі написано, але все таки не графоманство.
Це далеко не найгірше і не єдине до чого можна прискіпуватися. Там ще багато помилок, є «ЕОМ», «броузер» який багато кому не подомаєть.
А як би ви переклали наступне?
George Walker Bush — ?
Donald John Trump — ?
Навіть Google перекладає JavaScript українською як JavaScript
George
UPD: Взагалі, Paul в США це Павло в Україні. То може перекладати Paul Walker як Павло Скороход?
Який злив? Я проти перекладу назв і імен! А
Джордж
чи
Джьодж
то уже хто як вважає за потрібне. Автор не писав Ява/Джава скрипт, а писав Ява Сценарій, при тому, що script можна перекласти як сценарій і як скрипт.
Ви злилися ще тоді, коли ви в розмові про переклад згадали вимову
p.s.: як ви напишете «Andrii Zhuk» чи «Andrew Beetle»?
Але перекладати власнi назви — це занадто. «ЯваСценарій» виглядає не кращє за «Григорий Ходячий Куст». Можна спокiйно використовувати оригiнальну назву «JavaScript».
А як би ви переклали наступне?
George Walker Bush — ?
Donald John Trump — ?
Григорий Ходячий Куст
Данил Иванович Козырь
Изи-пизи.
А кому легко? Броузер это «песочница» — примитивная, корявая, тормознутая, но безопасная.
И чем больше будет вокруг хакеров-крякеров, ломающих/заражающих десктопный софт — тем больше будет спрос на решения для «песочниц».
По-крайней мере до тех пор, пока производители броузеров не начнут лажать — после чего станут ломать/заражать и их/через них.
Походу автор не осилил JS особенно нравится про то что в ДжС несколько вариантов наследование — сразу видно что чувак не в теме
Та че, автор осилил — это все остальные тупые, ничего не знают, кодят на jquery, думать не умеют и border-radius скриптами делают :)
Объяснить тут программирование? На эту тему люди книги пишут.
В этом случае тоже прототипное?
learn.javascript.ru/functional-inheritance
а это тоже наследование, а не иммитация?
new CoffeeMachine() instaceof Machine ===> false
PS не слышал, чтоб трейты в РНР называли «функциональным наследованием»
никакого другого наследования в js нет, все сводится к созданию нового объекта с свойством __proto__ ссылающегося на объект, от которого он наследуется, каким образом это будет сделано неважно, механизм один и тот же и проще уже некуда.
Самое интересное, что частенько сами фронт эндеры это не понимают, недавно на собесе спрашивали какие бывают виды наследования в js )))
недавно на собесе спрашивали какие бывают виды наследования в js )))
Надеюсь комната там обшита поролоном и никаких колющих/режущих предметов по близости нет, а то может попасться и не очень стрессоустойчивый кандидат :))
А никто не говорит что много хороших фронтендеров, собственно с бекендщиками нормальными тоже все туго.
Один парень писал все на JavaScript, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно.
Давайте, ображайте мене.
На таких не обижаются. Ничего, скоро в школу — это пройдет.
ЯваСценарію
Мне кажется, что вот такие штуки и прочие названия нужно писать на английском, а не коверкать, возможно даже вещи, которые не имеют удачного технического перевода на украинский. Благо «чарунки», кажется, не нашел :)
траллірувати
О мои глаза...)
Пришлось даже год публикации проверить, ибо статья описывает преимущественно реалии
асинхронність, класи і прототипи, чим proto відрізняється від prototype чи як щось зробити без jQuery.
с области секретных материалов. То, что описано это верстальщики, а javascript developer/engineer «оттролирует» Вас по полной
ЯваСценарій і реалізує справжнє ООП
а оно нормальное, просто не такое, мне лично классическое здесь нафиг не нужно, а тем кому влом разбираться, пусть идут лесом- и так добавили es6 классы для желторотиков.
Як це відбувається в інших мовах програмування?
Ну и зачем нам другие модели ООП в js? ИМХО достали люди, которые приходят с других языков, не желают вкуривать и начинают ныть, что js это не python/c++/ruby/java/etc :\
Мне кажется, что вот такие штуки и прочие названия нужно писать на английском, а не коверкать
Просто переклав назву.
Пришлось даже год публикации проверить, ибо статья описывает преимущественно реалии2010-2013 годов и вряд ли автор ушел дальше своего jquery, по этому и судит с высоты своего полета и думает что для всех других ...
Які ж реалії нинішнього 2017 року? Гадаю значна частина javascript developer/engineer таки не оттроллирует.
З чого ви взляли що в ES 6 (пишіть грамотно) класи додали саме для жовторотиків? Це які такі інші моделі ООП в JavaScript? В кого ООП більш ОО? Інші моделі ОО згодилися б для зручності написання і супроводження скриптів.
Просто переклав назву.
Всемережжя, МРГД (Мова розмітки гіпертекстових документів), КТС (Каскадні таблиці стилів), ПГП (ПГП: гіпертекстовий препроцесор), Вiкна, Какао...
Так, це погано, тому що читач, який звик бачити неперекладені терміни, очікує бачити ці терміни неперекладеними. Йдучи всупереч установленій традиції, ви крадете у читача час на розбір вашого тексту — так само, як і відсутністю абзаців.
Для завершения картины благородному дону не хватает веры во что-нибудь вроде гипертекстового фидонета.
Просто переклав назву.
А «назву» переводить и не надо, иначе такие переводы на украинский, отталкивают народ от его употребления в технической сфере. Незачем все подряд переводить на украинский, ради принципа, нужен грамотно написанный общий текст на украинском, с глобальными, общепринятыми терминами на инглише. Даже мне тяжело такое читать, ибо быстрое чтение тогда не работает, приходится посимвольно, хотя мне родной украинский.
З чого ви взляли що в ES 6 (пишіть грамотно) класи додали саме для жовторотиків?
З того, что это обсуждалось пару лет еще при разработке нового стандарта в комьюнити и изначально одной из главных целей было упрощение перехода для разработчиков с языков, где есть классический ООП. Собственно, много каких фич было специально внедрено с этих же соображений. Небольшое улучшение семантики для коренных разрабов погоды не делает.
Вторая по популярности фича- стрелочная функция, ибо народ не понимал почему теряется контекст и вообще с этим «проклятым this» у них беда.
await был добавлен сектой php-шников, путем внедрения двойных агентов, чтобы притянуть асинхронность к последовательным вызовам, понятные этим диким племенам :)
Мне лично достаточно Promise для обуздания чрезмерной вложенности callback, которые в то же время не слишком скрывают механизм асинхронности от программиста, хотя и без них жизнь вполне существовала.
Остальные плюсы как побочные эффекты.
Інші моделі ОО згодилися б для зручності написання і супроводження скриптів.
Так уже «зручно», и вполне себе было «зручно» последние лет 10 именно в контексте web, меня вполне устраивает прототипная модель, где я могу ей быстро и гибко крутить как хочу, со своими преимуществами и недостатками в каждом варианте.
А «назву» переводить и не надо, иначе такие переводы на украинский, отталкивают народ от его употребления в технической сфере.
Вы понимаете, что автор не просто перевел название, а это было сделано для добавления иронического оттенка объекта обозрения. Все так прикопались к переводу, будто бы ни разу на лурке статей не читали, ей богу.
а это было сделано для добавления иронического оттенка
там этого не понять- немало видел украиноязычных статей, которые тоже страдают коверканием и переводом, того чего не надо переводить. Но если так, то он делает нам одолжение- меньше народу- меньший демпинг jquery developer’ами- больший рейт :)
а оно нормальное, просто не такое, мне лично классическое здесь нафиг не нужно, а тем кому влом разбираться, пусть идут лесом- и так добавили es6 классы для желторотиков.
ИМХО достали люди, которые приходят с других языков, не желают вкуривать и начинают ныть, что js это не python/c++/ruby/java/etc :\
Достали люди, которые не видели нормальных языков и думают что js норм)
Достали люди, которые не видели нормальных языков и думают что js норм)
А что норм C# или Angular? :))
Давно ангуляр стал языком? Или это какой-то тонкий стеб?
По поводу шарпа(туда же джаву, плюсы, даже чистый си) тут вообще глупо сравнивать говно с конфеткой)
Вот brainfuck,PHP сгодятся для сравнения, тут JS конкурентноспособен, да.
Давно ангуляр стал языком?
да года 3 как... интернеты пестрят «нужен ли JavaScript для изучения Angular?»
Или это какой-то тонкий стеб?
Он самый :)
По поводу шарпа(туда же джаву, плюсы, даже чистый си)
Да не туда же- С++ ровнять к языкам с виртуальной машиной, где еще имеется автоматическое управление памятью со сборщиком мусора глупо. Помнится, там нормальных механизмов для прямой работы с памятью через указатели нету. Вообщем, нечего причислять их к взрослым хардкорным языкам с прямым управлением памятью.
Место джавы и мелкомягкого клона где то посередине между с++ и js :)
Помнится, там нормальных механизмов для прямой работы с памятью через указатели нету.
docs.microsoft.com/...reference/keywords/unsafe
А еще с помощью маршалинга можно юзать нетив библиотечки на плюсах, да и вообще достаточно возможностей работы с адресными пространствами
Да не туда же- С++ ровнять к языкам с виртуальной машиной, где еще имеется автоматическое управление памятью со сборщиком мусора глупо.
Тут речь о самом языке и его синтаксисе, а не о способе выполнения кода написанного на нем.
Тут речь о самом языке и его синтаксисе
Тогда это ровнять грабли с лопатой.
С синтаксисом в js все в порядке и он полегче остальных, а значит удачный, а что такое «сам язык» не понятно, если не обсуждать компилятор/интерпретатор и почему он такой как есть, то вообще о чем речь?
синтаксисом в js все в порядке
Я хочу синхронную функцию, которая возвращает ajax ответ когда он придет, как мне это сделать?
В с# будет:
public string GetData(){
var client = new HttpClient();
return client.GetStringAsync("www.example.com").Result;
}
Судя по кол-ву лайков на SO я не один задавался таким вопросом. Там говорят в
stackoverflow.com/...from-an-asynchronous-call
Я хочу синхронную функцию
И опять этот вечный вопрос:)) Ну зачем, зачем ее хотеть? Зачем пытаться натянуть синхронность на асинхронные вещи по своей природе?
Если я хочу запустить тред, который бы мне не только какие-то данные из интернета доставал, а ещё обрабатывал эти данные каким-то нетривиальным образом и потом присылал запустившему треду ссылку на результат, то намного логичнее код такого треда сделать синхронным.
Но в JS нет ни тредов, ни сообщений, так что это забивание гвоздей микроскопом. В JS синхронные функции, по-видимому, действительно не нужны.
Если я хочу запустить тред
Ну дык опять это исходит от того, что нужен тред, который в js не нужен, его функциональную роль, т.е. многопоточность в большей степени заменяет event loop.
то намного логичнее код такого треда сделать синхронным.
С какого боку это логичнее? Взаимодействие с сетью, дисками, обработка больших данных(кто знает что там при этом потребуется) по своей сути цепочка асинхронных задач.
Но в JS нет ни тредов
Да, в JS нет ваших тредов ибо необходимость их сомнительна- с многопоточностью начинаются проблемы синхронизации и взаимных блокировок при доступе к общим ресурсам, а если убирать общие ресурсы, то тогда разделенные процессы с одним потоком на каждый логичнее. Накладные ресурсы на его создание (хотя woker то раз стартует) с лихвой компенсируются то что каждый поток уже асинхронен и может обрабатывать кучу задач, особенно преимущество заметно на большой очереди мелких задач.
Но в JS нет
А зачем в самом JS Ваши сообщения? Это удел платформы аля Node и это отлично, что там много чего нет и api не загажен 100500 вариантами одного и того же- все что мне надо я подключу в виде модулей, который мне понравится.
ни сообщений
Ага, npm вообще пустой
В JS синхронные функции, по-видимому, действительно не нужны.
:)) Это как? даёшь все асинхронное?) Каждый вызов функции через event loop будет проходить? В JS не нужны якобы синхронные функции над асинхронными вещами, не нужно вводить в заблуждение разработчика. Абстракция типа Promise как раз удачная в этом смысле. Все те вещи что по синтаксису похожи на синхронные вызовы просто обертки на асинхронными, поток один и он не может ничего ждать, и его нельзя блокировать, ему постоянно нужно крутить свой event loop и обрабатывать подписки.
Да, в JS нет ваших тредов ибо необходимость их сомнительна- с многопоточностью начинаются проблемы синхронизации и взаимных блокировок при доступе к общим ресурсам,
рукалицо
Тредизм головного мозга. Вы почему-то хотите не _решить поставленную задачу_, а обязательно _решить ее определенным образом_.
Зачем вам вообще тут треды? Если вам нужно просто выполнить асинхронно задачу — JS для этого отлично подходит. Если вас волнует нагрузоустойчивость — вы не слышали про очереди и микросервисы? Если вы беспокоитесь о том, что не все ядра машины будут использованы — вы не слышали про Docker и оркестраторы контейнеров?
Не то чтобы я сильно защищал JS в этом контексте, просто ваш пример некорректен.
Тредизм головного мозга.
Як без await на колбеках написати функцию яка має свій стейт який вона змінює в залежності від 10 послідовних запитів від API, де рішення про новий запит та данні готуються після певних обчислень беручи данні з результатів попередніх запитів?
Promises chain
если очень хочется — можно использовать плагин под Babel
.bind/.call/.apply
проясніть, пліз, як на контекст вплине async/await?
На каждый чих по виртуалке с микросервисом в докере, какие угодно велосипеды лишь бы велосипеды. Не то чтобы я поливал говном JS , но тренд какой-то явно не здоровый.
Микросервисы и докеры круть, но сколько не заворачивай говно(JS) в фольгу оно останется говном
Чем Вас axio/$http не устраивают? В жс для веба просто нет места другой асинхронности, кроме общения с сервером. Не нужна она там так же, как многозадачность на смартфонах. А если понадобится, в ES 10 введут потоки.
Почему игнорируется babel и аппелируется к «поддержке в IE»? Вам шашечки или ехать? Оглянитесь: все в мире вокруг Вас условно ;)
Потому что синхронный код выглядит охуенно, а асинхронный — как говно, которое невозможно читать и писать (ваш кеп)
C async\await на С# очень даже неплохо выглядит, я бы сказал мега охуэнно, после этой каши промисов и калбэков на JS, конечно же надо вьехать в асинхронность как таковую и приколы TPL но оно того стоит.
Вообще-то в C# так делать тоже не очень хорошо, тредов в пуле не напасешься при большом количестве запросов, чтобы тупо ждать этот ответ. Тред который выполняет такой код, будет тупо висеть и ждать ваш ответ, а был бы он асинхронный то это тред вернулся бы в пул, обработал бы еще несколько таких\иных запросов из очереди задач, а когда пришел бы ответ от вашего exaple.com то из пула первый свободный тред взял бы эту задачу из очереди и обработал бы его.
Не понимаешь сути асинхронного подхода? Ничего, бывает, со временем въедешь.
Я бы с радостью использовал async/await как и в шарпе, но соре, у заказчика требования IE11, а некоторые вообще IE6 хотят.
А так — удачи вам с вашими коллбеками, вы там держитесь и всего хорошего, счастья здоровья. Может года через 3 можно будет потрогать async, а может даже и раньше выпустят очередной костыль в виде либы, аля respond.js , modernizr и все будет хорошо))
у меня для тебя плохие новости: в ИЕ11 и ИЕ6 ты НИКОГДА не потрогаешь async/await. Поэтому два варианта: либо врубаться в асинхронный подход, либо менять заказчика\работу\специализацию.
Ну тем более, чтобы не расстраиваться вообще забей. Нафиг оно тебе надо, какими-то новыми непривычными подходами голову забивать?
Ой, прости, совсем забыл картинку добавить
i570.photobucket.com/...tThinnens_zpsa65f7933.jpg
так понятнее?
C# в этом смысле не лучший пример, если учесть многочисленные проблемы использования контекстов синхронизации, специфики шедулинга на тред пуле и т.д. станет понятно, что однопоточный событийный js где тред заблокировать впринципе нельзя во многом куда более простое и понятное решение.
Нельзя заблокировать? Там что-то поменялось за прошлые неск лет? А то я как-то пилил функцию с таймерами ибо большой и толстый html с данными надо было всталвять и UI\браузер как раз вис при этой вставке.
Банальным алертом например.
Не во всех браузерах, хотя большинство да...
Смысл в том чтобы тормозить работу функции и отдавать возможность/время js на обработку других обработчиков событий, в противном случае ваш UI в барузере становится деревянным пока тот самы html не вставится и не отрисуется, таким образом если не делать прерывания в толстой функции js тред таки блокируется( занят только одно задачей), не на долго, но достаточно чтобы раздражать тормознутостью. Так что фраза «заблокировать тред в js» не совсем корректна.
Не зависимо от языка понятие блокировки потока не связано с выполнением CPU-bound операции в нем.
Да, потому фраза что тред в js нельзя заблокировать в принципе, мне царапает глаза, потому и наваял столько букав )))
Токо в браузерах, как и ноде есть механизм подымание другого потока/процесса для таких дел, но это не часть языка, как к примеру и в сях
Да вебворкеры существуют давно, но они так и не взлетели, особенно в брузере, возможно потому что веборкер не имеет доступа к дом.
это потому что они условно не дают преймуществ за исключением пары редких кейсов — главный тормоз во фронтенде — манипуляции DOM — а сам JS летает как самолет, а вебворкер вы только его и можете вынести, так что толку мало.
озможно потому что веборкер не имеет доступа к дом
а не имеет, бо тащить мьютексы и критические секции в JS — то вже занадто
многочисленные проблемы использования контекстов синхронизации
Это те, которые решаются .ConfigureAwait(false)?
Это один из способов решить одну проблему и получить другую, знаете какую? В конце концов считаете такой ’синхронный код’ это более натурально — чем обработка событий в коллбеках?
А делать такое в треде который отведен для UI, это вообще руки оторвать. Ваш UI не будет отвечать на все панические клики юзверя, пока этот тормознутый сайт не отдаст страничку.
та не, это ж не то же самое, что синхронный AJAX. это иммитация синхронности.
по сути, async функция возвращает промис.
а await конструкция ведет себя как .then(..., null) у промисов.
Речь про async/await в контексте сишарпа, а не esnext.
У них там в самом деле весь тред заблокируется до получения значения.
Коментар порушує правила спільноти і видалений модераторами.
но что на счет поддержки хотя бы IE11?
в 11м вообще ничего нового не появится, MS сказал.
проверяйте Edge.
обидно, да.
юзайте промисы.
Например так ...
function grValidSum_load() { if (!packet_id) { $APP.MESSAGE.ERROR.show('Не обрано пакет для контролю цілостності.'); return false; } // блокирую интерфейс динамической страницы от действий пользователя $APP.INTERFACE.progressOn(lcValid); var urlData = $APP.URL.cache("data/packet/valid/gr_" + valid_sum_code + "_sum_xml.php?packet_id=" + packet_id); grValidSum.clearAll(true); grValidSum.load(urlData, function() { $APP.DATA.process({ args: arguments, url: urlData, onSuccess: function() { if (grValidSum.getUserData("","valid_sum_ok")) { valid_sum_ok = true; $APP.MESSAGE.SUCCESS.show('Контроль завершено. Цілістність даних підтверджено.'); } else { valid_sum_ok = false; $APP.MESSAGE.FAIL.show('Контроль завершено. Наявні помилки цілістності даних.'); } }, onError: function() { }, onFinally: function() { ui_update(); tbValidSum.enableItem("btnGrSumExpText"); tbValidSum.enableItem("btnGrSumExpWord"); tbValidSum.enableItem("btnGrSumExpExcel"); // По окончанию обработки ответа, снимаю блокировку с интерфейса. $APP.INTERFACE.progressOff(lcValid); } }); }); }
Обґрунтуйте будь ласка.
І на чому тоді треба писати, щоб себе поважати?
для формошлепов ангулар, реакт и прочий мусор это языки. а от нодежыэс, написанного на Си, у них долгий и продолжительный оргазм
а от нодежыэс, написанного на Си, у них долгий и продолжительный оргазм
Подгорело? Много ли компиляторов, не написанных на С/++? Го кодить все на асм х86
Відповідь чому JS такий популярний доволі проста. Це попит на веб-сайти з бантиками та мереживами функціоналом, причому який можна перекласти на сторону клієнта. Зрозуміло, що сайт у стандартах 1.0 буде працювати та буде виконувати свої функції, але користувач буде «зустрічати по одежі».
Доречі в цій тусовці також є люди котрі отримують задоволення від JS, напевно один із факторів — дуже легко поділитися своїм результатом з більш широкую аудиторією, вони зазвичай наглядні.
tl; dr: поверхностный буллшит, в сети есть тьма гораздо более глубоких и аргументированных статей от хейтеров, которые хотя-бы интересно читать...
-
Тримай нас в курсі. Ми тут всі любимо подібні інформаційні пости від «інтелектуалів».
Хріновий текст російською — просто хріновий текст. Хріновий текст українською — оця ваша мова ніфіга не читабельна.
Як назвати людину в якої не вистачає інтелекту щоб
1) розуміти текст українською мовою
2) розуміти що не варто розпалювати мовосрачі на тематичному форумі ?
Сподіваюся, шановний дописувачу, що ви надалі не будете продовжувати накидати на вентилятор. Бо інакше доведеться визнати, що то таки 47 хромосома впливає на ваші розумові процеси в головному мозку і залишити вас наодинці з вентилятором.
Як назвати людину в якої не вистачає інтелекту щоб
2) розуміти що не варто розпалювати мовосрачі на тематичному форумі ?
Dr Olaf
Ну я завжди звик говорити людям, все що про них думаю, а не встидливо опускати очі і мовчки проходити мимо. Ви, як я бачу, теж :-D
Найкращі коментарі пропустити