1) "0.1 + 0.2 = 0.30000000000000004". В C# тоже такое есть, это прикол процессора а не языков программирования. И по моему это даже хорошо, что JS не делает лишней работы по округлению, так больше производительность. 2) Про NaN не понял в чем проблема. NaN означает неопределенное число, любое число. И я думаю все проблемы с ним возникают из-за того что люди не понимают смысла этого значения. "любое число" не равно "любому числу", и поэтому NaN === NaN будет всегда возвращать false. 3) "Объект переданный в функцию может быть изменен" Это особенность не JS, а всех не функциональных языков: C++, C#, Java, ... "Необходимо постоянно копировать объекты..." - это проблема архитектуры и не понимания языка и его возможностей. 4) "Сложность с определением типа данных". Не такая уж и сложность, скорее легкое неудобство, которое решается набором функций хелперов. Когда пишешь сложные программы такие мелочи не напрягают совсем. 5) "Низкая производительность глубокого наследования". Согласен что здесь есть потери в производительности, но они не такие уж и большие. Кроме того v8 развивается и исправляет такие недостатки. 6) "JavaScript однопоточный", и слава богу. Это значит, что ни одному разработчику не придется заниматься отладкой многопоточных приложений, разрешением взаимных блокировок и прочим. Ну и переключение между потоками и создание потоков отнимает у процессора дополнительное время. Решение с WebWorker на мой взгяд очень хорошее для создания многопоточных приложений на JS. 7) "последовательные await работают последовательно", так как и должны работать, так же и в C# работают. Для одновременности (для одновременной загрузки данных например) нужно использовать Promise.all(...) 8) "проблема кроссбраузерности и кроссплатформенности" решается тестами с использованием такихъ решений как karma или intern js + selenoid. Минус только в том что с этим нужно дополнительно разбираться и настраивать. Но тем не менее по части кроссплатформенности JS все равно обходит все другие подобные решения. 9) "изменения в браузере ломают код программы и приходится переписывать". Да это нужно учитывать заранее и продумывать архитектуру приложения. 10) "проблемы с babel", следуй только принятым стандартам языка и проблем не будет. Смысл в babel только в том чтобы программист всегда мог писать на самой свежей версии языка не заботясь о кроссбраузерности. 11) "может писать на другом языке который транслируется в JS". Можем, но проблема производительности будет всегда и для всех языков, и поэтому намного лучше писать приложения на чистом JS и понимать как он быстро работают отдельные его элементы, чем дополнительно еще думать о том как другой язык скомпилируется в JS.
2) NaN - Not a number. Не число. Вообще,совсем,ниразу не число. 3) И да, и нет. Иногда скопировать объект нереально из-за дикой вложенности, при этом он является сторонним кодом. 4) Об этой хeрне приходится помнить, так что напрягает. 5) Не особо развивается. Уже оптимизировали всё что можно. 6) Но при этом асинхронный, так что хз, хз. 7) Я думаю речь про рефакторинг. Можно заeбаться и случайно накосячить. Но в целом согласен, притянуто за уши. 8) Какие ещё другие? 0_о 9) Бред. Не угадаешь что они решат выпилить. 10) Проблема в том, что приходишь на проект или берёшь заказ, а там какой-то eблан вот такое вот такое вот "набабелил". Разбираться очень неприятно. 11) Лучше снести всё это древнее HTML|CSS|JS говно и сделать заново. И не ври, что у тебя не было подобных мыслей )
00:42 *Числа в языке JS реализованы одним типом* Это не так. Согласно спецификации у нас есть есть два типа Number и BigInt. В реальности же типов три: Small Integer: 31 битное целое число со знаком, число с плаваюшей точкой (double) и BigInt. соответственно. Причем реализация SMI вне зависимости от того, что оно остуствует в спецификации, во всех рантайм одинаковая. Любая работа с числами, если она может быть помещена в 31 бит ( именно 31 а не 32) автоматически ведется как работа со SMI типом. Стоит перейти эту границу и мы получаем Double. Ну а BigInt обяьвляется через свою нотацию. 01:13 *Прикол с числами* Такой, как Вы выразились прикол с числами, есть во всех языках абсолютно. Более того все они дают один и тот же результат в случае, если как и JavaScript реализовывают математику с плавающей запятой согласно общему стандарту IEEE 754. Если говорить академическим языком, то естественно никаких приколов в языке нет. И он ведет себя строго в соответствии со спецификацией, в рамках которой работают и другие языки. 01:20 *typeof* унарный оператор тайпоф не сообщает тип переменной. И никогда не сообщал. Унарный оператор typeof возвращает строку в соответствии с определенными условиями, которые могут выходить далеко за рамки типа данных. Внимательно прочитайте официальную спецификацию и не несите чуши. 01:36 *NaN* Это не в JS. Это во всех языках программирования которые реализуют логику работы с числами с плавающей запятой, согласно общепринятому стандарту IEEE 754. Где описаны как все операции так и такие константы как NaN -0 +0 и так далее. Вам домашнее задание - прочитать специфакию и понять для чего в нее введены такие, как вы сказали странные числа как NaN. После чего, я очень надеюсь Вы больше не будете повторять этой ахинеи 04:40 *В JS никогда не было ООП* Молодой человек, у меня для вас плохие новости. В JS реализована старейшая парадигма ООП, называемая прототип ориентировання модель ООП. Классы - это другое направление ООП, называемое класс ориентированное. Которое с точки зрения возраста использования просто ребенок перед прототипами. ООП не зависит от того есть у вас классы в языке или нет. Вам домашнее задание прочитать что такое ООП, какие его основные признаки, какие бывают модели ООП 06:50 *JS однопоточен* С разморозкой. С 2010 года JS перестал быть однопоточным. Всем желающим вкусить радости гонки, оргазмы от использования мьютекосв и прочие прелести программирования когда у вас больше одного потока и ивент лупа домашнее задание: прочитать что такое Workerы, следом прочитать что такое Atomic операции. Провести пару опытов с воркерами, своими глазами убедиться что это отдельные тред и даже отдельный процесс со своим евент лупом, который может продолжать работать даже когда вы убили рантайм. 07:50 *Лапша кода* Когда люди делали подобную реализацию, они считали что пользоваться ей будут программисты, которые знают что такое композиция функций, а не прокладка между клавиатурой и креслом, которая даже допустить не может что ребята уже давно подумали, это кто то просто забыл сделать тоже самое. 09:00 *async awaite это синтаксический сахар* async и awaite это не только не синтаксический сахар над промисами, но и имеет совершенно другую природу. Вам очередное домашнее задание, узнать что такое генераторы и какое отношение они имеют к async awaite. И если уж фантазировать на тему сладкого, то async awaite это синтаксический сахар поверх генераторов, которые являются частным случаем когда возвращаемые данные всегда завернуты в промис обьект. *Игого* Попытка притянуть за уши проблемы бабеля и тех кто его использует к самому языку заслуживает отдельного комментария, который уже совсем писать не хочется. Автор видео вообще не знает JS и вероятно даже спецификацию никогда в глаза не видел. Занимается мифотворчеством и хуже всего то, что делает это он с лицом человека, который познал сермяжную правду языка. На деле же выдает свои фантазии за реальность.
@@SeniorSoftwareVlogger Молодой человек. Я уверен в том, что Вы и сейчас не в состоянии пройти собеседования даже на позицию Junior разработчика с вопросами которые касаются только базовой платформы языка которая не менялась с 1994 года. Если Вы думаете иначе я Вам онлайн это могу продемонстрировать, задав Вам бызовые вопросы, выслушать ваши ответы и показать потом как на самом деле. Так что конечно же апелляция к 5 годам хороший аргумент, но не в Вашем случае.
- Я уже устал про комментарий про 0.1 + 0.2 === 0.30000000000004... Посмотрите пожалуйста на другие языки. Там по бОльшей части происходит тоже самое. 0.30000000000000004.com/ - На мобильных устройствах ты тоже не контролируешь платформу - Пример с глубокими колбеками - так никто не пишет (либо в команду нужен эксперт, который оттучит делать такую жесть). Promise-hell тоже не делают обычно. Даже лет 8 назад, когда они были в драфтах, в статьях глубоко критиковали такую запись. - Наследованием в JS почти никто не балуется. От того что компоненты в Реакте начинаются со слова Class, ООП это назвать язык не поворачивается. - Babel - у всех тот же самый JS. Бандл у клиента тот же самый (за редким исключением). Как минимум позволяет на разных платформах писать один код. И если мы больше не поддериживаем IE11, то мы просто можем отключить ту часть, которая её полифилила или преобразовывала, вместо рефакторинга всего кода. Во всех языках есть свои компромиссы продиктованные историей и платформой. И на любом языке можно писать хорошо.
@@yevhenukrainianer4781 Можете добиться этого при помощи вебворкеров. Но это сухой ответ и это не всегда удобно. Исходить нужно от задачи. Возможно вам хватит просто правильно приготовленной асинхронности. Если сильно нужна именно многопоточность, то возьмите другой язык который под это заточен. Как правило, люди в отрыве от программирования не пытаются молотком срубить дерево. Молоток прекрасно забивает гвозди, но им тяжело срубить дерево, но это не проблема молотка. Это не минус JS, он просто напросто не создавался для этого. А вот всё что по асинхронности там работает прекрасно.
@@SeniorSoftwareVlogger Думаю пройдёт ещё не один год пока это станет реально удобным. C WASM можно уже хоть сейчас, но это уже отдельный слой приложения.
На 3:25 вроде логично выглядит, что new Boolean(true) - это "object", ведь по сути это и есть объект "класса" Boolean. Если написать просто Boolean(true), без new, то тип будет "boolean"
Это и есть логично. Но для js.На деле Boolean - это обертка. Ее нельзя использовать. Она создается автоматически при вызове методов примитивных типов данных (ведь у примитивных типов данных методов нет и быть не может - на то они и примитивные). Но: if (new Boolean(false)) alert('Nope!');
Джс просто відрізняється від тієї мови до якої він звик. В цілому це просто інструмент, який чудово виконує свою роботу. У нього є певні нюанси, але і сам світ неідеальний. Хлопчина цього не хоче розуміти, так само як і не хоче зрозуміти причини чому так. Джс був написаний на колінці за декілька днів на своєму початку. Це була примітивна мова для того, щоб хоч якось добавити інтерактив у веб. І що ми маємо зараз? ну ви всі самі знаєте Перед розробниками ядра джс стоять набагато серйозніші виклики ніж перед творцями більшості інших мов. Кросбраузерність, кросдевайсність, , величезний зоопарк областей застосування і треба то все хоч якось продумати і заставити працювати і найголовніше - треба вводити нові апішки, розвивати мову, але і потрібно підтримувати за будь яку ціну старий функціонал джс, тому що багато вебсайтів працюють на старому апі Ну трохи про нюанси джави (типу, а у вас теж не все гладко) - всі кажуть, що у джави є типізація і бла блабла. protected / private і подібні класні штуки ооп. У джави крім цього ще є така чудова штука, як Рефлексія через яку можна дістатись до методів (і не тільки) будь якого класу, включаючи приватні. Тобто ми можемо спокійно отримати доступ до приватного методу будь якого класу. Що якби, не сильно гуд. Також воно дозволяє створити інстанс класу в рантаймі програми, при чому ім"я класу може бути невідоме до момента рану програми. Чи колл методу інстанса класу по його імені. Якось динамічно виходить) - на рахунок мутабельності джс. Так у джави також є mutable objects, при чому більшість класів в джаві - мутабли. Більше того, багато людей в джаві юзають mutable на повну, оосбливо в біг даті. Тому що кожен раз робити новий "імутабл" об"єкт при якійсь маніпуляції з датою, ресурсозатратно і б"є по пам"яті, особливо у випадку з великими об"ємами даних - лапша коду в джс. Ой боже ж ти мій, а джавовські легендарні Хелло ворлд класи з '''public static final void main()''' то зовсім не лапша, чи тонни геттерів\сеттерів в класах джс якраз через свою динамічність набагато лаконічніший і менш verbose ніж будь яка типізована мова Одним словом факати особливості мови це нерозумно, чесно кажучи. Набагато правильніше буде спробувати зрозуміти чому так, або ж просто слідувати правилам мови, а з досвідом і прийде розуміння цих самих правил.
Привет, может тут уже спрашивали, но все же. Что ты думаешь про webassembly? Заменит ли он в конечном счете Javascript? (сорри за холиварную постановку вопроса)
да легко. если от всего технического абстрагироваться, то он приходит к миру с одной из величайших сущностей человека - ленью. бэкендеры могут спокойно писать на своих языках и это будет пахать на фронте. яркий пример Blazor от мелкомягких. фигачишь на c# и фронт готов
@@ilya_khabibullin Виндер в одном из стримов высказался о некоторых блогерах, включая автора этого канала, что они - нули и не умеют как следует доносить мысль до аудитории. Если бы он был хоть немного умнее/постарше/дипломатичнее, то знал бы, что делать выводы о человеке сугубо по видосам, не поработав с ним лично, - весьма поспешно и,как минимум, низко. Более того, он кичится своим инглишем, а по факту его уровень ниже upper intermediate. Пойдет для неформальных попизделок и просмотра фильмов с субтитрами или попыток произвести впечатление на школоту артистичностью при попытках сэмулировать американское произношение. Не более, во всяком случае на данный момент.
Эхх. Что-то подсказывает, что по мере просмотра видео напечатаю много букв... 1. Типы данных - 0.1+0.3 - js здесь не причем, это ограничения двоичной СЧ - typeof NaN - в js NaN это одно из возможных значений для чисел, так же как и Infinity. Причем без него в js просто не обойтись, ведь в нем никакие математические операции не вызывают ошибок - что является часть его идеологии 2. Объекты - передача объекта в функцию - ...честно, вы издеваетесь? JS - не С. В java обьекты тоже передаются по ссылке. Это вообще не проблема. А ресурсоемко (хоть в том же С это почти не существенно) + А вот new Boolean() и прочие - это да. На деле об это знают (должны знать) все, но как по мне, такие штуки, просто либо должны быть скрыты от программиста, либо хотя бы он их не должен уметь создавать. Но зато такой штукой можно пугать людей из других языков: if (new Boolean('false')) alert('Nope!'); 3. Пототипы - Здесь на самом все очень просто - это js и это его идеология. Он так работает. Это как раз и дает ту его гибкость, за которую иногда приходится платить. - Переопреление прототипов - так просто делать нельзя. Но если это теже, поллифилы - это это очень удобно и круто. - Медленно из-за поиска во всех прототипах. Просто по аналогии. Хотим получить значение переменой. Она ищется в текущем scope. Если не находится идет в родительский scope, если не находится там, то идем еще выше и выше, пока не дойдем до глобального объекта. То есть то же самое. И опять же такое или похожее поведение есть по многих языках программирования. В случае прототипов, может быть и будет немного медленее, но в 99.9999% случаев - это реально не важно. Смысл беспокоиться за тысячные доли миллическды, когда другие вещи в любом коде работают от десяток милисекунд до декунд. Если их ускорить на 1% прироста производительности будет больше, чем если ускорить переход по прототипам в пару раз. 4. Ассинхроность - Ассинхроность в js мне просто нереально нравится. Это просто нереально удобно, по сравнению с другими языками. Хоть это и не настаоящая ассинхроность - все равно. Все равно это очень удобно - Ад колбеков и мэм 7:23 - писать код можно по разному. В любом языке можно сделать 10000 уровней вложенности. Это не вина языка. Это вина того, кто это пишет. 5. Не контролируешь платформу +- это хоть и да, но ведь по другому, к сожалению никак. Это бремя веба. 6. На js напишем js (про babel) - какой у каждого свой js? Поллифилы это круто. Просто не нужно в серьезных вещах использовать совсем уж стремные вещи. 7. Модули - Вчера/позавчера слышал в подкасте Вадима Макеева (Веб Стандарты), что mjs уже можно и не использовать (ну либо можно, но пока ранова-то) 8. Обратная совместимость - Старые сайты ломать нельзя - всегда, такая идеология это одновременно и просто огромнейший плюс, и ужасный минус. Уже добавили use strict. Но это тоже ж ведь не решение. Хоть бери и делай так что бы в начале файла вместо use strict можно было указывать версию js. Типа doctype для js))
Про проблему с цифрми и то что это единственный тип. На деле ж ведь, то что всего 1 тип - не проблема. Ведь все проблемы с числами все равно связаны в тем что они не целые. А если работать с целыми - хоть они и float, проблем все равно нет. А если работать с не целыми, то в любом случае будут.
0.1 + 0.2 = 0.3000x не потому происходит что JS плохой, а потому что невозможно уместить в отведенных под одно число двоичных разрядов sizeof(double) все возможные представления вещественных чисел. Поэтому на "дальних от 0 дистанциях" жертвуют точностью. Рекомендую ознакомиться как устроены числа с плавающей запятой. На счёт того что все в JS объект, а что ты хотел в языке с динамической типизацией?
Нууу, то что все - объект это, по моему, вообще не минус, а про числа - почему нельзя просто взять количество цифр посте точки у первого числа, у второго и сравнить а потом округлить до количества цифр после точки того числа, у которого это значение больше Или сделать все просто Просто сделать так, что 0.1 == 0.100000... (без сюрпризов в конце) И 0.2 == 0.200000... (тоже без сюрпризов) Я не понимаю, почему этого нет?
"На счёт того что все в JS объект, а что ты хотел в языке с динамической типизацией?", на самом деле это не так. Например когда мы написали вот так: let n = 3; Мы сделал переменную с примитивным типом "number", но что будет если мы вызовем у этого числа метод toString: n.toString(); создастся объект обёртка, т.е вот такое выражение: new Number(n).toString(); А т.к функция-конструктор возвращает объект в котором есть метод toString, мы можем его вызвать. Ещё стоит сказать что многие движки это оптимизируют. А вот если бы мы сразу записали: let n = new Number(3); В переменной n уже хранилась бы ссылка на объект, но тогда возникнет проблема с typeof.
Насчет NaN: это все абсолютно нормально и есть в других ЯП, не только в JS. И работает оно так же. Значение NaN должно было использоваться в случаях, когда, например, +inf делится на +inf. Вот что должно получиться? По правилам мат анализа должно было получиться ИДИНАХУЙ. То же самое и с взятием корня из отрицательного числа. Ну просто нужно было такое значение, которое, в случае правильного срабатывания программы, дает какой-то адекватный результат и записывает свое значение в адрес памяти, отведенный для числа. А в случае неправильного - выдает ИДИНАХУЙ, но при этом не валит полностью всю программу. Таким образом тебе не нужно заранее проверять перед каждой операцией число на валидность. Ну вот допустим у тебя огромная формула с делениями, взятиями корней и степеней. Будешь каждую бинарную операцию записывать в отдельную переменную и проверять, можно ли ее использовать дальше? Да ну нахуй. Ну и также решили, что было бы удобно, что NaN не равен ничему, даже самому себе; поэтому нужно вызывать отдельную функцию. Так что JS вполне себе нормальный ЯП, не настолько уж хуже остальных.
Эх, классика. В js числа с плавающей точкой ничем не отличаются от double в C++ или Java. Единственное что console.log в отличие от printf, cout или System.out.println выводит гораздо больше знаков после запятой. Поэтому КАЖЕТСЯ что 0.1 + 0.2 как-то не так складываются только в javascript. Это только так кажется. с NaN то же самое. Это не часть javascript, это часть стандарта, который реализован на любом железе. NaN есть везде.
@@love.society про 3.00000...4 -- да. Это не вина языка, это просто то, как работает железо. Железо не умеет нормально работать с числами, которые не делятся на 2, такими как 2/3 или 3/7. Всегда будет определённая погрешность. Если интересно, то почитай информацию на сайте 0.30000000000000004.com
@@vlad071096 на самом деле есть, надо места знать )) Настоящая целочисленная арифметика включается при наличии битового оператора который ничего не делает, например, вот целочисленное деление: a / b | 0. Правда только 32 бита.
Я только собираюсь учить JS и ничего в нем не смыслю, но почитав коментарии понял, что программирование бывает веселее всяких там кинокомедий. Особенно добил комент про жонглирование хуями. Ржу в голос и вытираю слезы :)
@@SeniorSoftwareVlogger давненько наблюдаю твой канал, очень много полезных видосов для "вкатывальщиков" вайти, но сразу возникает вопрос - как ты сам относишься к феномену повального "войтивайти"?
в каком языке программирования решена проблема обновления? С учетом новых фич. Такой есть, если не придуман полгода или год назад. Это как бы вопрос, но не уверен надо ставить знак ? На чистом JS в продакшен наверное мало кто выходит. Это Vues, TypeScr, NestJs ... и далее, которые не уверен все кто-то понимает или хотя бы знает. Наверное в этих фреймворках учтены перечисленные проблемы. Хотя, все конечно не надо надеяться можно учесть в любом ЯП.
4:33 Javascript с самого начала поддерживает ООП-парадигму, соответственно, он является объекто-ориентированным языком. Просто в основе JS лежит прототипная организация. То, что Javascript не статично-классовый, как Java, например, не перестаёт делать его объектно-ориентированным.
или как было написано в одной из книг (либо "JavaScript сильные стороны", либо "JavaScript Шаблоны проектирвания") JS - это САМЫЙ объектно ориентированный язык. Ведь в нем ВСЕ объекты)))
1:40 - Всё верно, NaN *это число!* Неопределенность или NaN (от not a number) - это представление, придуманное для того, чтобы арифметическая операция могла всегда вернуть какое-то не бессмысленное значение. В IEEE754 NaN представлен как число, в котором E=Emax+1, а мантисса не нулевая. Источник: habr.com/ru/post/112953/
Не понимаю почему все набросились на автора видео? Как по мне он все верно сказал. Он просто уточнил некоторые особенности языка, которыхз нет в компилируемых. Я не увидел никакой некомпетентности.
javascript всегда был объектно ориентированный или у тебя ООП исключительно с классами связан? кароче много чего высосано из пальца та же проблема складывания чисел 0.1+0.2 это все по стандарту IEEE 754 которым следует не только js а и много других языков
@@matsitskyss только фреймворк это не лопата, чтобы начать эффективно пользоваться фреймворком, на изучение его надо потратить больше времени, чем на язык программирования. А при устройстве на работу от тебя будут ждать знания туевой хучи этих фреймворков. Ничего классного не вижу.
Пункт 2 с мутацией объекта не понял. Что здесь неудобного, разве в других языках как-то по-другому реализовано? Я думаю, модифицировать исходные параметры метода - это в любом случае плохое решение. Еще Макконнелл в "Совершенном коде" писал: "не используйте параметры метода в качестве рабочих переменных". При таком подходе выстрелить себе в ногу гораздо легче и метод труднее сопровождать. Интересно посмотреть кейс, в котором это понадобилось. Вообще, изучая JS, я тоже много плевался и делал много ошибок. В основном это происходит от того, что язык очень многое позволяет сделать - на этапе изучения легко наломать дров. Но с опытом гибкость языка становится преимуществом. Для тех, кому это всё же не нравится в силу личных убеждений, есть TypeScript.
@Тимофей Кривенко При чем, только, здесь, функциональное наследование???? Та штука к мета программированию находится ближе чем к функциональному программированию))
Во многих языках можно контролировать, передвать объект по ссылки либо копировать. В том же С/С++: void func(User user) {} // копируется, и если в функции поменять что-то в объекте, то во внешнем коде ничего не поменяется void func(User &user) {} // передается по ссылке (как в js/java...) void func(User *user) {} // передается указатель (суть таже, но немного по другому (на самом деле предыдущий способ, скорее сокращение этого)) И все же как в js мне нравится больше. Хоть и как в C++ тоже интересно. Как минимум гибкости в больше, хоть и подывает сложность.
@Сергей Семенов, проблема в том что если проект чужой вы будете долго искать ошибку мутации. В своём проекте конечно вы уже сами контролируете код. Например в React по умолчанию принята анмутабельность, но если там где то в коде объект изменится, то вы ногу сломаете пока будете искать баг. Думаю автор именно это имел ввиду.
Все ответы в книге "Yout don't know JS". Ну блин не ожидал от тебя. Классы это прекрасно. Люди городили монстров на основе прототипов пытаясь сделать из прототипов наследование. На вам классы. И тут полилось "Ой это не круто. Внутри прототипы." Babel это не новый JS это и есть JS. Это даже не суперсет как TS. Это просто обычный транспайлер. А негативный опыт у тебя с экспериментальными функциями. Их никто тебя и не просил использовать. Это везде отмечается. Async/Await это вообще проще некуда. Пришло из C#. Куда сложнее понять callback/promise. А модули это вообще прекрасно. Наконец то можно писать что-то нормальное.
Классный контент! Можешь рассказать о плюсах минусах Golang, перспективах. Я начинал изучать программирование давно и плевался от ПХП, с джаваскриптом были какие-то мучения, а GO очень понравился. Может Я - мясо и программирование не моё ? Летаю в сомнениях. Хотел бы разработать AI, который будет обучать людей английскому, но это так фантазии школьника, в реальности все слишком сложно. Посоветуй что-нить (
Сосредоточься на чем-то одном - выбери стек, сделай небольшой проект от начала и до конца. Гуманитарии заходят в прогинг и нормально себя чувствуют, поэтому качай скилл, ориентируясь на требования вакансий, и перестанешь считать себя мясом.
Сделай пожалуйста ролик про курсы программирования . Интересно твое мнение , лучше ли те люди которые закончили курсы , чем те которые зависали 5 лет в университете , хотя бы на раннем этапе работы с ними . Надеюсь ты прочтешь...
Я прочёл! Просрать свое время бездарно можно как на курсах, так и в универе. С той разницей, что диплом ценится хотя бы при эмиграции, а сертификат курсов вообще никому не нужен. Ни курсы но универ сами по себе не определяют качество специалиста и окончание одного не означает, что можно игнорить другое
Классное видео. Напоминает чайка-менеджмент (Прилетел, нагадил, улетел). А будет ли видел как эти проблемы исправлять? Или как писать код так, что бы не ходить по граблям? 🤔
Кратко о текущей веб разработке: стремленние юзать максимальное количество инструментов, которые конвертируют норм код в говно код ( понятный браузеру)
Да и в целом, исторически js -- это язык браузерный, поэтому есть много боли, при попытках сделать его языком универсальным, но то что получилось на сегодняшний день выглядит более чем многообещающим
@@SeniorSoftwareVlogger Это архитектураная проблема компютера что получение нецелие числа хранятся с чудовешним остатком и в фильме "Матрица" как я помню из за этого и произашло сбой в системе․
На счет мутации не согласен. В нормальных ЯП мутация не является побочным эффектом, особенно в императивном стиле. Просто многие JS-еры никогда не слышали про ссылочные и значимые типы. По поводу await, 8:40 тут извини автор, если внимательно (не жопой, а глазами) прочитать принцип работы await то все вполне очевидно. Соблюдать SOLID сложно даже в C#, а JS и вовсе невозможно. Самое страшное происходит когда проект обрастает кучей кастомных методов высшего порядка, оберток над обертками, и библиотеками разных подходов описания. Даже отсутствие патерн мачинга уже перестает напрягать, при виде конфигураций вынесенных в отдельный проект. С таким подходом любая процедурщина в 6000 строк будет выглядеть куда более понятнее и привлекательнее для любителей нырнуть в легаси, нежели этот взрыв на макаронной фабрике с осколками деклараций типов в TS , и любительским подходом к организации кода. Каждый год сеньоры пытаются отделить мух от котлет, выдумывая библиотеки, и новые фишки в экосистемах именитых фреймворков, в надежде сохранить стандарты, архитектурные паттерны, и читабельность кода. Вот только, сколько волка не корми (хуками, воркерами, composition_api, virtualDOM, SSR, и прочими костылями), он все равно Null объектом считает ;)
Отличное видео, все так и есть. А на языках, которые транслируются в js итак все пишут, тот же TypeScript. Того гляди JS станет чем-то вроде байт-кода у Java или IL у C#.
У ES модулей есть замечательная особенность. Попробуйте в браузере динамически импортировать модуль у которого есть такой экспорт: export const then = () => console.log('Hello!')
Тоже ах*ел, когда начал изучать js (недавно), но только после полугода на плюсах) Но только не уверен, что захочется остаться, пока чувствую себя неуютно
@@DevilAlex03 попробуй typescript. Хотя он тоже не идеальный, со своими багами и особенностями (к примеру, когда проверяешь переменную на undefined и используешь ее во вложенной функции, тебе компилятор ошибку выдает и говорит что нужно опять проверить на undefined).
Я не защищаю JS. Я его тоже НЕ люблю, но: 1.Я не понял проблему с Babel. Почему не использовать стандарт ECMAScript и не париться? 2.Про асинхроность на 8:28 const [result1, result2] = await Promise.all([task1(), task2()]); 3.Можна узнать браузер и железо через UAParser и подстроиться под пользователя. 4.TypeScipt решает проблемы с типами данных
Все сказанное, очень спорно. Сложилось впечатление, что это кликбэйт. Сам автор как будто не очень понимает, о чем говорит. Гораздо справедливее отметить, например typeof null === 'object' [1, 2] + [3, 4] === '1,23,4' Вот это действительно странно. Но и у этого есть обьяснения
Прошу ознакомиться как хранятся данные с плавающей точкой, и вы поймете почему сложение дробных чисел будет давать такие результаты (подсказка = мантисса экспонента).
@@SeniorSoftwareVlogger Согласен. Спасибо за ответ. Может я не так сформулирован комментарий. Это посыл к нашей общей боли - товарищей которые вошли в "айти" по курсам, и в большинстве случаев не знаю базы и не очень хотят развиваться. Если что то извините.
@@xBesss Несмотря на это он лидирует в топ 3. Ежегодно между прочим. Можно сделать вывод , лучше уж со страшной но с умной , или с умеющей варить борщяк :с
Require, import это просто паттерн модуль, реализован через оборачивание кода в самовызывающиюся анонимную функцию. Что с этим то не так? Не хочешь export писать, ну заворачивай в такие функции, а то вдруг уберут из стандарта)
при всем уважении к автору, передача объектов по ссылке - это Фундаментальная особенность большинства языков программирования. Это быстрее, чем передача по значению (плюс учтите необходимость глубокого копирования объекта) и позволяет менять объект на вызывающей стороне.
Да-да и автор рассказывал про это в видео про чистые функции. Фундаментально, да. Быстрее, да. Проще реализовать, да. Пинает программиста под зад, тоже да.
Мне с -дивана- бэкенда показалась хорошая идея компиляции программ с другого языка на js. Типа как в react, angular, scalajs и куче других подобных. По крайней мере для тех, кто предпочитает компилируемые языки. Долгоиграющие проекты - это везде похоже боль.
Ну по поводу погрешности в 0.1 + 0.2 = 0.300..04 это тут дело не в самом JS, а в машинной точности. Это рядовая проблема из-за того, что такие числа как 0.1 в двоичной системе счисления не могут быть представлены конечным количеством бит из-за своей периодичной сущности.
Александр Смуров сейчас наверное скажу неприятную для тебя вещь ,но если ты знаешь основы языка, то иди скачивай Фреймворк , открывай доку и практикуйся. Напиши в начале авторизацию ,подёргай какие-то апишки. Придумай себе задачу (мини пэт проект) и попробуй его написать. Примеров как писать на нагуляно можешь на гитхабе поискать
- А давайте возьмем самый отсосный язык програмированния, написанный за 10 дней и сделаем его единственным для разработки самой быстрорастущей и доступной платформы - А давайте! (шел 1995 год, никто ничего не знал)
@@BohdanVR666 компьютеры не умеют точно вычислять числа с плавающей точкой (натуралтные). Для обхода этого используют приближенные вычисления, до определенного знака. IEEE-754 описывает как раз способ вычисления натуральных чисел. И т,к, это приближенные вычисления, то они дают подобные артефакты
Дима, спасибо! Сталкиваюсь с ЖС по столку поскольку (15-25% рабочего времени) и этого всего не знал, а тут так сжато, и доходчиво по подводным камням - самое то. Сделай пожалуйста нечто похожее про Руби\Рельсы, Я думаю не Я один кому это интересно, спасибо.
можно и так сказать, сегодня все плагины ставить нужно отдельно, и сказать бабелю какие браузеры/версии ноды хочешь поддерживать. На основании этого он сам определяет какие фишки компилить, а какие можно оставить
Спасибо вам за столь информативные влоги. Скажите пожалуйста, в Германии берут на работу программистов без профильного высшего образования? есть гражданство еврпейской страны
@@mivnvi.4685 github.com/microsoft/TypeScript/issues куча проблем TS. норм только для HelloWorld и Junior задач , когда используешь в фреймворке с современными фичами - там полно говна всплывает. не всегда типы подсказывает. тормозит, зайди в русское сообщество в телеге, все дерьмом поливают его, крмое джунов которые написали (a:number, s:string) и думают что у них в проекте Ts)))))00
@@mivnvi.4685 Если и хочется типизации качественной, то вали из JS и бери нормальный язык, ане обмазывайся костылями. ты считаешь TS нормальным языком, потому что тебе не с чем сравнивать. и да ООП не нужен в 2019 году в JS) ты отстал от жизни.
@@ivansidorov5 чем тебе типизация TS не угодила? Приведи хоть 1 факт. Если TS объектно ориентированный это не значит, что на нем не пишут в функциональном стиле. Ты типичный ретранслятор, который слепо пересказывает чужое мнение.
Правильно сказал! Зачем писать на JavaScript, если все равно он будет компилироваться на JavaScript??? Буду писать на своём любимом c# используя blazor. Вот еще приближается net core 6 который добавить ещё больше фичи для него
Javascript: *has mutations*
C++ pointers: *hold my beer*
1) "0.1 + 0.2 = 0.30000000000000004". В C# тоже такое есть, это прикол процессора а не языков программирования. И по моему это даже хорошо, что JS не делает лишней работы по округлению, так больше производительность.
2) Про NaN не понял в чем проблема. NaN означает неопределенное число, любое число. И я думаю все проблемы с ним возникают из-за того что люди не понимают смысла этого значения. "любое число" не равно "любому числу", и поэтому NaN === NaN будет всегда возвращать false.
3) "Объект переданный в функцию может быть изменен" Это особенность не JS, а всех не функциональных языков: C++, C#, Java, ...
"Необходимо постоянно копировать объекты..." - это проблема архитектуры и не понимания языка и его возможностей.
4) "Сложность с определением типа данных". Не такая уж и сложность, скорее легкое неудобство, которое решается набором функций хелперов. Когда пишешь сложные программы такие мелочи не напрягают совсем.
5) "Низкая производительность глубокого наследования". Согласен что здесь есть потери в производительности, но они не такие уж и большие. Кроме того v8 развивается и исправляет такие недостатки.
6) "JavaScript однопоточный", и слава богу. Это значит, что ни одному разработчику не придется заниматься отладкой многопоточных приложений, разрешением взаимных блокировок и прочим. Ну и переключение между потоками и создание потоков отнимает у процессора дополнительное время. Решение с WebWorker на мой взгяд очень хорошее для создания многопоточных приложений на JS.
7) "последовательные await работают последовательно", так как и должны работать, так же и в C# работают. Для одновременности (для одновременной загрузки данных например) нужно использовать Promise.all(...)
8) "проблема кроссбраузерности и кроссплатформенности" решается тестами с использованием такихъ решений как karma или intern js + selenoid. Минус только в том что с этим нужно дополнительно разбираться и настраивать. Но тем не менее по части кроссплатформенности JS все равно обходит все другие подобные решения.
9) "изменения в браузере ломают код программы и приходится переписывать". Да это нужно учитывать заранее и продумывать архитектуру приложения.
10) "проблемы с babel", следуй только принятым стандартам языка и проблем не будет. Смысл в babel только в том чтобы программист всегда мог писать на самой свежей версии языка не заботясь о кроссбраузерности.
11) "может писать на другом языке который транслируется в JS". Можем, но проблема производительности будет всегда и для всех языков, и поэтому намного лучше писать приложения на чистом JS и понимать как он быстро работают отдельные его элементы, чем дополнительно еще думать о том как другой язык скомпилируется в JS.
2) NaN - Not a number. Не число. Вообще,совсем,ниразу не число.
3) И да, и нет. Иногда скопировать объект нереально из-за дикой вложенности, при этом он является сторонним кодом.
4) Об этой хeрне приходится помнить, так что напрягает.
5) Не особо развивается. Уже оптимизировали всё что можно.
6) Но при этом асинхронный, так что хз, хз.
7) Я думаю речь про рефакторинг. Можно заeбаться и случайно накосячить. Но в целом согласен, притянуто за уши.
8) Какие ещё другие? 0_о
9) Бред. Не угадаешь что они решат выпилить.
10) Проблема в том, что приходишь на проект или берёшь заказ, а там какой-то eблан вот такое вот такое вот "набабелил". Разбираться очень неприятно.
11) Лучше снести всё это древнее HTML|CSS|JS говно и сделать заново. И не ври, что у тебя не было подобных мыслей )
JS, C++ и C# - не функциональные? ok...
@@СергейКнязев-ь1р чтоб не напрягаться с типами, есть тайпскрипт.
Пункты 1 и 2 берут начало из IEEE 754, учите матчасть
Киану Ривз реально крутой мужик!
Практически все видосы его смотрю, реально интересно :)
А теперь видео почему ты любишь js, а то грустно стало)
00:42 *Числа в языке JS реализованы одним типом*
Это не так. Согласно спецификации у нас есть есть два типа Number и BigInt.
В реальности же типов три: Small Integer: 31 битное целое число со знаком, число с плаваюшей точкой (double) и BigInt.
соответственно. Причем реализация SMI вне зависимости от того, что оно остуствует в спецификации, во всех рантайм одинаковая.
Любая работа с числами, если она может быть помещена в 31 бит ( именно 31 а не 32) автоматически ведется как работа со SMI типом. Стоит перейти эту границу и мы получаем Double. Ну а BigInt обяьвляется через свою нотацию.
01:13 *Прикол с числами*
Такой, как Вы выразились прикол с числами, есть во всех языках абсолютно. Более того все они дают один и тот же результат в случае, если как и JavaScript реализовывают математику с плавающей запятой согласно общему стандарту IEEE 754.
Если говорить академическим языком, то естественно никаких приколов в языке нет. И он ведет себя строго в соответствии со спецификацией, в рамках которой работают и другие языки.
01:20 *typeof*
унарный оператор тайпоф не сообщает тип переменной. И никогда не сообщал. Унарный оператор typeof возвращает строку в соответствии с определенными условиями, которые могут выходить далеко за рамки типа данных. Внимательно прочитайте официальную спецификацию и не несите чуши.
01:36 *NaN*
Это не в JS. Это во всех языках программирования которые реализуют логику работы с числами с плавающей запятой, согласно общепринятому стандарту IEEE 754. Где описаны как все операции так и такие константы как NaN -0 +0 и так далее. Вам домашнее задание - прочитать специфакию и понять для чего в нее введены такие, как вы сказали странные числа как NaN. После чего, я очень надеюсь Вы больше не будете повторять этой ахинеи
04:40 *В JS никогда не было ООП*
Молодой человек, у меня для вас плохие новости. В JS реализована старейшая парадигма ООП, называемая прототип ориентировання модель ООП. Классы - это другое направление ООП, называемое класс ориентированное. Которое с точки зрения возраста использования просто ребенок перед прототипами.
ООП не зависит от того есть у вас классы в языке или нет. Вам домашнее задание прочитать что такое ООП, какие его основные признаки, какие бывают модели ООП
06:50 *JS однопоточен*
С разморозкой. С 2010 года JS перестал быть однопоточным. Всем желающим вкусить радости гонки, оргазмы от использования мьютекосв и прочие прелести программирования когда у вас больше одного потока и ивент лупа домашнее задание: прочитать что такое Workerы, следом прочитать что такое Atomic операции. Провести пару опытов с воркерами, своими глазами убедиться что это отдельные тред и даже отдельный процесс со своим евент лупом, который может продолжать работать даже когда вы убили рантайм.
07:50 *Лапша кода*
Когда люди делали подобную реализацию, они считали что пользоваться ей будут программисты, которые знают что такое композиция функций, а не прокладка между клавиатурой и креслом, которая даже допустить не может что ребята уже давно подумали, это кто то просто забыл сделать тоже самое.
09:00 *async awaite это синтаксический сахар*
async и awaite это не только не синтаксический сахар над промисами, но и имеет совершенно другую природу. Вам очередное домашнее задание, узнать что такое генераторы и какое отношение они имеют к async awaite. И если уж фантазировать на тему сладкого, то async awaite это синтаксический сахар поверх генераторов, которые являются частным случаем когда возвращаемые данные всегда завернуты в промис обьект.
*Игого*
Попытка притянуть за уши проблемы бабеля и тех кто его использует к самому языку заслуживает отдельного комментария, который уже совсем писать не хочется.
Автор видео вообще не знает JS и вероятно даже спецификацию никогда в глаза не видел. Занимается мифотворчеством и хуже всего то, что делает это он с лицом человека, который познал сермяжную правду языка. На деле же выдает свои фантазии за реальность.
Можно ещё через 5 лет зайти с новой порцией разоблачений ;)
@@SeniorSoftwareVlogger Молодой человек. Я уверен в том, что Вы и сейчас не в состоянии пройти собеседования даже на позицию Junior разработчика с вопросами которые касаются только базовой платформы языка которая не менялась с 1994 года. Если Вы думаете иначе я Вам онлайн это могу продемонстрировать, задав Вам бызовые вопросы, выслушать ваши ответы и показать потом как на самом деле.
Так что конечно же апелляция к 5 годам хороший аргумент, но не в Вашем случае.
Ух! Ну не смогу так не смогу 🤣
капец ты душнила
Спасибо, надо будет некоторые вещи себе в календарик учебный внести.
Расскажите про все языки программирования, которые вы знаете. Как учили, где информацию о них брали
Почему Джон Уик стал программистом?🤔
Ну а куда ему в киберпанке без этого...
Это прикрытие хакера Baba_Yaga.
Это Джон Сноу
- Я уже устал про комментарий про 0.1 + 0.2 === 0.30000000000004...
Посмотрите пожалуйста на другие языки. Там по бОльшей части происходит тоже самое.
0.30000000000000004.com/
- На мобильных устройствах ты тоже не контролируешь платформу
- Пример с глубокими колбеками - так никто не пишет (либо в команду нужен эксперт, который оттучит делать такую жесть). Promise-hell тоже не делают обычно. Даже лет 8 назад, когда они были в драфтах, в статьях глубоко критиковали такую запись.
- Наследованием в JS почти никто не балуется. От того что компоненты в Реакте начинаются со слова Class, ООП это назвать язык не поворачивается.
- Babel - у всех тот же самый JS. Бандл у клиента тот же самый (за редким исключением). Как минимум позволяет на разных платформах писать один код. И если мы больше не поддериживаем IE11, то мы просто можем отключить ту часть, которая её полифилила или преобразовывала, вместо рефакторинга всего кода.
Во всех языках есть свои компромиссы продиктованные историей и платформой. И на любом языке можно писать хорошо.
Так как многопоточности добиваться правильно в ДжС ?
@@yevhenukrainianer4781 никак. JS однопоточный по определению.
@@yevhenukrainianer4781 Можете добиться этого при помощи вебворкеров. Но это сухой ответ и это не всегда удобно. Исходить нужно от задачи. Возможно вам хватит просто правильно приготовленной асинхронности. Если сильно нужна именно многопоточность, то возьмите другой язык который под это заточен. Как правило, люди в отрыве от программирования не пытаются молотком срубить дерево. Молоток прекрасно забивает гвозди, но им тяжело срубить дерево, но это не проблема молотка. Это не минус JS, он просто напросто не создавался для этого. А вот всё что по асинхронности там работает прекрасно.
Многопоточность есть в вебассембли и комитет джаваскрипта уже думает, как ее в сам язык запилить.
@@SeniorSoftwareVlogger Думаю пройдёт ещё не один год пока это станет реально удобным. C WASM можно уже хоть сейчас, но это уже отдельный слой приложения.
Добрый день, можете пожалуйста название своего кресла написать. И за сколько купили?
На 3:25 вроде логично выглядит, что new Boolean(true) - это "object", ведь по сути это и есть объект "класса" Boolean. Если написать просто Boolean(true), без new, то тип будет "boolean"
Это и есть логично. Но для js.На деле Boolean - это обертка. Ее нельзя использовать. Она создается автоматически при вызове методов примитивных типов данных (ведь у примитивных типов данных методов нет и быть не может - на то они и примитивные).
Но:
if (new Boolean(false)) alert('Nope!');
Ничего не понял, но очень интересно
+ xD
Я на немного решил, что winderton - это реально такой тип данных в JS
Выучил js по этому видео
Сенсей помог тебе постичь дзен ;)
Джс просто відрізняється від тієї мови до якої він звик. В цілому це просто інструмент, який чудово виконує свою роботу. У нього є певні нюанси, але і сам світ неідеальний.
Хлопчина цього не хоче розуміти, так само як і не хоче зрозуміти причини чому так. Джс був написаний на колінці за декілька днів на своєму початку. Це була примітивна мова для того, щоб хоч якось добавити інтерактив у веб. І що ми маємо зараз? ну ви всі самі знаєте
Перед розробниками ядра джс стоять набагато серйозніші виклики ніж перед творцями більшості інших мов. Кросбраузерність, кросдевайсність, , величезний зоопарк областей застосування і треба то все хоч якось продумати і заставити працювати
і найголовніше - треба вводити нові апішки, розвивати мову, але і потрібно підтримувати за будь яку ціну старий функціонал джс, тому що багато вебсайтів працюють на старому апі
Ну трохи про нюанси джави (типу, а у вас теж не все гладко)
- всі кажуть, що у джави є типізація і бла блабла. protected / private і подібні класні штуки ооп. У джави крім цього ще є така чудова штука, як Рефлексія через яку можна дістатись до методів (і не тільки) будь якого класу, включаючи приватні. Тобто ми можемо спокійно отримати доступ до приватного методу будь якого класу. Що якби, не сильно гуд. Також воно дозволяє створити інстанс класу в рантаймі програми, при чому ім"я класу може бути невідоме до момента рану програми. Чи колл методу інстанса класу по його імені. Якось динамічно виходить)
- на рахунок мутабельності джс. Так у джави також є mutable objects, при чому більшість класів в джаві - мутабли. Більше того, багато людей в джаві юзають mutable на повну, оосбливо в біг даті. Тому що кожен раз робити новий "імутабл" об"єкт при якійсь маніпуляції з датою, ресурсозатратно і б"є по пам"яті, особливо у випадку з великими
об"ємами даних
- лапша коду в джс. Ой боже ж ти мій, а джавовські легендарні Хелло ворлд класи з
'''public static final void main()''' то зовсім не лапша, чи тонни геттерів\сеттерів в класах
джс якраз через свою динамічність набагато лаконічніший і менш verbose ніж будь яка типізована мова
Одним словом факати особливості мови це нерозумно, чесно кажучи. Набагато правильніше буде спробувати зрозуміти чому так, або ж просто слідувати правилам мови, а з досвідом і прийде розуміння цих самих правил.
Привет, может тут уже спрашивали, но все же.
Что ты думаешь про webassembly? Заменит ли он в конечном счете Javascript?
(сорри за холиварную постановку вопроса)
ну конкурентов помимо много, так что можно просто ндеятся, что что-нибудь заменит)
да легко. если от всего технического абстрагироваться, то он приходит к миру с одной из величайших сущностей человека - ленью. бэкендеры могут спокойно писать на своих языках и это будет пахать на фронте. яркий пример Blazor от мелкомягких. фигачишь на c# и фронт готов
@@BHy4OK двачую, сам юзал blazor, очень классная технология
@@slnt_opp а что там ещё есть ?
казалось бы, причем тут winderton
да, причем тут этот счв'шный /dev/null ?
А причем, кстати?
@@ilya_khabibullin Виндер в одном из стримов высказался о некоторых блогерах, включая автора этого канала, что они - нули и не умеют как следует доносить мысль до аудитории. Если бы он был хоть немного умнее/постарше/дипломатичнее, то знал бы, что делать выводы о человеке сугубо по видосам, не поработав с ним лично, - весьма поспешно и,как минимум, низко.
Более того, он кичится своим инглишем, а по факту его уровень ниже upper intermediate. Пойдет для неформальных попизделок и просмотра фильмов с субтитрами или попыток произвести впечатление на школоту артистичностью при попытках сэмулировать американское произношение. Не более, во всяком случае на данный момент.
@@cascadengineering А дайте, плиз, ссылку на этот видос, если возможно. Хочу поглядеть :)
@@zaemiel Он закрывает доступ к стримам через какое-то время, и они становятся доступными только тем, кто является его патронами (через patreon.com).
Привет) Интересный видос,спасибо) Вот такого плана бы побольше)
Эхх. Что-то подсказывает, что по мере просмотра видео напечатаю много букв...
1. Типы данных
- 0.1+0.3 - js здесь не причем, это ограничения двоичной СЧ
- typeof NaN - в js NaN это одно из возможных значений для чисел, так же как и Infinity. Причем без него в js просто не обойтись, ведь в нем никакие математические операции не вызывают ошибок - что является часть его идеологии
2. Объекты
- передача объекта в функцию - ...честно, вы издеваетесь? JS - не С. В java обьекты тоже передаются по ссылке. Это вообще не проблема. А ресурсоемко (хоть в том же С это почти не существенно)
+ А вот new Boolean() и прочие - это да. На деле об это знают (должны знать) все, но как по мне, такие штуки, просто либо должны быть скрыты от программиста, либо хотя бы он их не должен уметь создавать.
Но зато такой штукой можно пугать людей из других языков:
if (new Boolean('false')) alert('Nope!');
3. Пототипы
- Здесь на самом все очень просто - это js и это его идеология. Он так работает. Это как раз и дает ту его гибкость, за которую иногда приходится платить.
- Переопреление прототипов - так просто делать нельзя. Но если это теже, поллифилы - это это очень удобно и круто.
- Медленно из-за поиска во всех прототипах. Просто по аналогии. Хотим получить значение переменой. Она ищется в текущем scope. Если не находится идет в родительский scope, если не находится там, то идем еще выше и выше, пока не дойдем до глобального объекта. То есть то же самое. И опять же такое или похожее поведение есть по многих языках программирования. В случае прототипов, может быть и будет немного медленее, но в 99.9999% случаев - это реально не важно. Смысл беспокоиться за тысячные доли миллическды, когда другие вещи в любом коде работают от десяток милисекунд до декунд. Если их ускорить на 1% прироста производительности будет больше, чем если ускорить переход по прототипам в пару раз.
4. Ассинхроность
- Ассинхроность в js мне просто нереально нравится. Это просто нереально удобно, по сравнению с другими языками. Хоть это и не настаоящая ассинхроность - все равно. Все равно это очень удобно
- Ад колбеков и мэм 7:23 - писать код можно по разному. В любом языке можно сделать 10000 уровней вложенности. Это не вина языка. Это вина того, кто это пишет.
5. Не контролируешь платформу
+- это хоть и да, но ведь по другому, к сожалению никак. Это бремя веба.
6. На js напишем js (про babel)
- какой у каждого свой js? Поллифилы это круто. Просто не нужно в серьезных вещах использовать совсем уж стремные вещи.
7. Модули
- Вчера/позавчера слышал в подкасте Вадима Макеева (Веб Стандарты), что mjs уже можно и не использовать (ну либо можно, но пока ранова-то)
8. Обратная совместимость
- Старые сайты ломать нельзя - всегда, такая идеология это одновременно и просто огромнейший плюс, и ужасный минус. Уже добавили use strict. Но это тоже ж ведь не решение. Хоть бери и делай так что бы в начале файла вместо use strict можно было указывать версию js. Типа doctype для js))
Про проблему с цифрми и то что это единственный тип.
На деле ж ведь, то что всего 1 тип - не проблема. Ведь все проблемы с числами все равно связаны в тем что они не целые. А если работать с целыми - хоть они и float, проблем все равно нет.
А если работать с не целыми, то в любом случае будут.
Кстати, не знал, про BigInt. Посмотрел - классная штука.
Создал число, запись которого весит пару мегабайт))
0.1 + 0.2 = 0.3000x не потому происходит что JS плохой, а потому что невозможно уместить в отведенных под одно число двоичных разрядов sizeof(double) все возможные представления вещественных чисел. Поэтому на "дальних от 0 дистанциях" жертвуют точностью. Рекомендую ознакомиться как устроены числа с плавающей запятой.
На счёт того что все в JS объект, а что ты хотел в языке с динамической типизацией?
Нууу, то что все - объект это, по моему, вообще не минус, а про числа - почему нельзя просто взять количество цифр посте точки у первого числа, у второго и сравнить а потом округлить до количества цифр после точки того числа, у которого это значение больше
Или сделать все просто
Просто сделать так, что 0.1 == 0.100000... (без сюрпризов в конце)
И 0.2 == 0.200000... (тоже без сюрпризов)
Я не понимаю, почему этого нет?
@@BohdanVR666 потому что IEEE 754
"На счёт того что все в JS объект, а что ты хотел в языке с динамической типизацией?", на самом деле это не так. Например когда мы написали вот так:
let n = 3;
Мы сделал переменную с примитивным типом "number", но что будет если мы вызовем у этого числа метод toString:
n.toString();
создастся объект обёртка, т.е вот такое выражение:
new Number(n).toString();
А т.к функция-конструктор возвращает объект в котором есть метод toString, мы можем его вызвать.
Ещё стоит сказать что многие движки это оптимизируют.
А вот если бы мы сразу записали:
let n = new Number(3);
В переменной n уже хранилась бы ссылка на объект, но тогда возникнет проблема с typeof.
Насчет NaN: это все абсолютно нормально и есть в других ЯП, не только в JS. И работает оно так же. Значение NaN должно было использоваться в случаях, когда, например, +inf делится на +inf. Вот что должно получиться? По правилам мат анализа должно было получиться ИДИНАХУЙ. То же самое и с взятием корня из отрицательного числа. Ну просто нужно было такое значение, которое, в случае правильного срабатывания программы, дает какой-то адекватный результат и записывает свое значение в адрес памяти, отведенный для числа. А в случае неправильного - выдает ИДИНАХУЙ, но при этом не валит полностью всю программу. Таким образом тебе не нужно заранее проверять перед каждой операцией число на валидность. Ну вот допустим у тебя огромная формула с делениями, взятиями корней и степеней. Будешь каждую бинарную операцию записывать в отдельную переменную и проверять, можно ли ее использовать дальше? Да ну нахуй. Ну и также решили, что было бы удобно, что NaN не равен ничему, даже самому себе; поэтому нужно вызывать отдельную функцию.
Так что JS вполне себе нормальный ЯП, не настолько уж хуже остальных.
Вставлять рекламу воркшопа на JS в видео о ненависти к этому языку - это гениально.
в js много проблем, но это не отменяет того что он нужен и востребован сейчас
Дим Приветствую ! Делиться империческим опытом бесценно!! Спасибо за ценный контент !
Эх, классика. В js числа с плавающей точкой ничем не отличаются от double в C++ или Java.
Единственное что console.log в отличие от printf, cout или System.out.println выводит гораздо больше знаков после запятой. Поэтому КАЖЕТСЯ что 0.1 + 0.2 как-то не так складываются только в javascript.
Это только так кажется.
с NaN то же самое. Это не часть javascript, это часть стандарта, который реализован на любом железе. NaN есть везде.
От С тоже?
@@love.society про 3.00000...4 -- да. Это не вина языка, это просто то, как работает железо. Железо не умеет нормально работать с числами, которые не делятся на 2, такими как 2/3 или 3/7. Всегда будет определённая погрешность. Если интересно, то почитай информацию на сайте 0.30000000000000004.com
Идиотизм не в плавающей точке, а в том, что целочисленного типа нет.
На самом деле это потому, что лень было рантайм делать.
@@vlad071096 на самом деле есть, надо места знать ))
Настоящая целочисленная арифметика включается при наличии битового оператора который ничего не делает, например, вот целочисленное деление: a / b | 0. Правда только 32 бита.
Совершенно не против рекламы,просто она у тебя начинается как-то неожиданно :D
Я только собираюсь учить JS и ничего в нем не смыслю, но почитав коментарии понял, что программирование бывает веселее всяких там кинокомедий. Особенно добил комент про жонглирование хуями. Ржу в голос и вытираю слезы :)
не бросил js?
Это не "мутации" объектов, это передача по ссылке. Компутер сайнс, емае.
Да, узколобым фронтендерам не ведомо что так во всех языках
Детектед 😂
На ruclips.net/video/k_mRqDoeAGg/видео.html он там я тоже обосрался сказав по привычке "передача по указателю"
@@SeniorSoftwareVlogger давненько наблюдаю твой канал, очень много полезных видосов для "вкатывальщиков" вайти, но сразу возникает вопрос - как ты сам относишься к феномену повального "войтивайти"?
@Владислав Дараган мой пукан молчит, не полыхает. Какие с этим проблемы?
в каком языке программирования решена проблема обновления? С учетом новых фич. Такой есть, если не придуман полгода или год назад. Это как бы вопрос, но не уверен надо ставить знак ?
На чистом JS в продакшен наверное мало кто выходит. Это Vues, TypeScr, NestJs ... и далее, которые не уверен все кто-то понимает или хотя бы знает.
Наверное в этих фреймворках учтены перечисленные проблемы. Хотя, все конечно не надо надеяться можно учесть в любом ЯП.
Есть мнение, dart сможет заменить javascript, что думаете об этом?
Один раз не смог, а теперь и Тайпскрипт подрос
@@SeniorSoftwareVlogger то есть, typescript, возможно альтернатива javascript? Или надежда, js сможет исправить костыли и возможно ли это?
Все возможно 🙏
Привет, а можешь расскызать про typeScript решает ли он проблемы, и если да, то почему его обычно не используют?
Еще появился TypeScript аля расширенный JS. Расскажи про реакт и\или ангулар, что лучше и тп
Лучше vuejs.
TS это костыль в JS , имеет кучу проблем и недоделок
@@ivansidorov5 ts шикарен после js
@@ivansidorov5 TS хорош, но если сравнивать с тем же C#, который тоже от микрософта, то экспириенс бедноват. Продолжаем ждать wasm
@@ArtemKuznetsovTV Ты просто не пробвоал нормальные языки
а что это за hacktoberfest?
Дмитрий, почему в видео присутствует "winderton" ?? будет какой-то коллаб, обзор или что-нибудь в этом стиле?
4:33
Javascript с самого начала поддерживает ООП-парадигму, соответственно, он является объекто-ориентированным языком. Просто в основе JS лежит прототипная организация. То, что Javascript не статично-классовый, как Java, например, не перестаёт делать его объектно-ориентированным.
или как было написано в одной из книг (либо "JavaScript сильные стороны", либо "JavaScript Шаблоны проектирвания") JS - это САМЫЙ объектно ориентированный язык. Ведь в нем ВСЕ объекты)))
1:40 - Всё верно, NaN *это число!*
Неопределенность или NaN (от not a number) - это представление, придуманное для того, чтобы арифметическая операция могла всегда вернуть какое-то не бессмысленное значение. В IEEE754 NaN представлен как число, в котором E=Emax+1, а мантисса не нулевая.
Источник: habr.com/ru/post/112953/
Про колбеки несуразица. Что мешает использовать ссылку на функцию вместо ее реализации в калбеке?
Лишний аргумент у функции. А их может быть длинная цепочка.
Громкость звука нужно сделать больше!!! Еле-еле слышно
Не понимаю почему все набросились на автора видео? Как по мне он все верно сказал. Он просто уточнил некоторые особенности языка, которыхз нет в компилируемых. Я не увидел никакой некомпетентности.
javascript всегда был объектно ориентированный или у тебя ООП исключительно с классами связан? кароче много чего высосано из пальца та же проблема складывания чисел 0.1+0.2 это все по стандарту IEEE 754 которым следует не только js а и много других языков
а как тебе Lua или С# в сравнении с JS ?
Круто. Глубокие знания.
если это стеб, то норм
@@Илья-с1л6э Нет не стёб. Кратко и с юмором.
@@angular-developer-e1t тогда вам стоит самому изуть тему, потому что автор не сильно знаком с JS и экосистемой
@@Илья-с1л6э Я уже полтора года как фронтед девелопер и мне хватает.
NaN - единственный объект, который != самому себе.
Новый день, новый фреймворк, слишком медленно
@@matsitskyss хах, смешно
@@matsitskyss только фреймворк это не лопата, чтобы начать эффективно пользоваться фреймворком, на изучение его надо потратить больше времени, чем на язык программирования. А при устройстве на работу от тебя будут ждать знания туевой хучи этих фреймворков. Ничего классного не вижу.
@@xcxc-iu3rb вы какие-то странные фреймворки используете, раз вам их учить приходится. В контексте джаваскрипта по крайней мере.
@@matsitskyss потому что все недофреймворки херовые, вот и пилят кучу.
Пункт 2 с мутацией объекта не понял. Что здесь неудобного, разве в других языках как-то по-другому реализовано? Я думаю, модифицировать исходные параметры метода - это в любом случае плохое решение. Еще Макконнелл в "Совершенном коде" писал: "не используйте параметры метода в качестве рабочих переменных". При таком подходе выстрелить себе в ногу гораздо легче и метод труднее сопровождать. Интересно посмотреть кейс, в котором это понадобилось.
Вообще, изучая JS, я тоже много плевался и делал много ошибок. В основном это происходит от того, что язык очень многое позволяет сделать - на этапе изучения легко наломать дров. Но с опытом гибкость языка становится преимуществом. Для тех, кому это всё же не нравится в силу личных убеждений, есть TypeScript.
+1
@Тимофей Кривенко При чем, только, здесь, функциональное наследование???? Та штука к мета программированию находится ближе чем к функциональному программированию))
Во многих языках можно контролировать, передвать объект по ссылки либо копировать.
В том же С/С++:
void func(User user) {} // копируется, и если в функции поменять что-то в объекте, то во внешнем коде ничего не поменяется
void func(User &user) {} // передается по ссылке (как в js/java...)
void func(User *user) {} // передается указатель (суть таже, но немного по другому (на самом деле предыдущий способ, скорее сокращение этого))
И все же как в js мне нравится больше.
Хоть и как в C++ тоже интересно. Как минимум гибкости в больше, хоть и подывает сложность.
Вот когда будете поддерживать реальный проект, тогда прймете что мутация объекта не есть гуд.
@Сергей Семенов, проблема в том что если проект чужой вы будете долго искать ошибку мутации. В своём проекте конечно вы уже сами контролируете код. Например в React по умолчанию принята анмутабельность, но если там где то в коде объект изменится, то вы ногу сломаете пока будете искать баг. Думаю автор именно это имел ввиду.
Все ответы в книге "Yout don't know JS". Ну блин не ожидал от тебя. Классы это прекрасно. Люди городили монстров на основе прототипов пытаясь сделать из прототипов наследование. На вам классы. И тут полилось "Ой это не круто. Внутри прототипы." Babel это не новый JS это и есть JS. Это даже не суперсет как TS. Это просто обычный транспайлер. А негативный опыт у тебя с экспериментальными функциями. Их никто тебя и не просил использовать. Это везде отмечается. Async/Await это вообще проще некуда. Пришло из C#. Куда сложнее понять callback/promise. А модули это вообще прекрасно. Наконец то можно писать что-то нормальное.
Сергей :) Все в порядке, жди другое видео 😉
Классный контент! Можешь рассказать о плюсах минусах Golang, перспективах. Я начинал изучать программирование давно и плевался от ПХП, с джаваскриптом были какие-то мучения, а GO очень понравился. Может Я - мясо и программирование не моё ? Летаю в сомнениях. Хотел бы разработать AI, который будет обучать людей английскому, но это так фантазии школьника, в реальности все слишком сложно. Посоветуй что-нить (
Сосредоточься на чем-то одном - выбери стек, сделай небольшой проект от начала и до конца. Гуманитарии заходят в прогинг и нормально себя чувствуют, поэтому качай скилл, ориентируясь на требования вакансий, и перестанешь считать себя мясом.
@@cascadengineering Спасиба!
11:36 - иронично это слушать в то время как typescript набрал огромную популярность nowadays))
@bitmap im too согласен with тобой
Привет, а что за микрофон петличка, подскажите?
kit.com/seniorsoftwarevlogger
видео получилось очень классное)) Можешь запилить подобное про Erlang? А то тема очень интерестная но на RUclips материала по ней очень мало))
Мы хотим такие видосы
Сделай пожалуйста ролик про курсы программирования . Интересно твое мнение , лучше ли те люди которые закончили курсы , чем те которые зависали 5 лет в университете , хотя бы на раннем этапе работы с ними . Надеюсь ты прочтешь...
Я прочёл! Просрать свое время бездарно можно как на курсах, так и в универе. С той разницей, что диплом ценится хотя бы при эмиграции, а сертификат курсов вообще никому не нужен. Ни курсы но универ сами по себе не определяют качество специалиста и окончание одного не означает, что можно игнорить другое
Классное видео. Напоминает чайка-менеджмент (Прилетел, нагадил, улетел). А будет ли видел как эти проблемы исправлять? Или как писать код так, что бы не ходить по граблям? 🤔
Парень из закреплённого коммента расскажет! 👌 А если серьезно, то планирую. Это чтобы аппетит разыгрался
Кратко о текущей веб разработке: стремленние юзать максимальное количество инструментов, которые конвертируют норм код в говно код ( понятный браузеру)
Ну начнём с того, что js не при чём при вычислении 0.1+0.2, это проблема хранения данных в двоичной системе, что прописано в IEEE 754
Да и в целом, исторически js -- это язык браузерный, поэтому есть много боли, при попытках сделать его языком универсальным, но то что получилось на сегодняшний день выглядит более чем многообещающим
🙄
@@SeniorSoftwareVlogger ну и аудитория у тебя :)
@@alexey.sibirtsev и не говори, mansplain`ят вещи о которых сказано на первой минуте.
@@SeniorSoftwareVlogger Это архитектураная проблема компютера что получение нецелие числа хранятся с чудовешним остатком и в фильме "Матрица" как я помню из за этого и произашло сбой в системе․
На счет мутации не согласен. В нормальных ЯП мутация не является побочным эффектом, особенно в императивном стиле. Просто многие JS-еры никогда не слышали про ссылочные и значимые типы. По поводу await, 8:40 тут извини автор, если внимательно (не жопой, а глазами) прочитать принцип работы await то все вполне очевидно. Соблюдать SOLID сложно даже в C#, а JS и вовсе невозможно. Самое страшное происходит когда проект обрастает кучей кастомных методов высшего порядка, оберток над обертками, и библиотеками разных подходов описания. Даже отсутствие патерн мачинга уже перестает напрягать, при виде конфигураций вынесенных в отдельный проект. С таким подходом любая процедурщина в 6000 строк будет выглядеть куда более понятнее и привлекательнее для любителей нырнуть в легаси, нежели этот взрыв на макаронной фабрике с осколками деклараций типов в TS , и любительским подходом к организации кода.
Каждый год сеньоры пытаются отделить мух от котлет, выдумывая библиотеки, и новые фишки в экосистемах именитых фреймворков, в надежде сохранить стандарты, архитектурные паттерны, и читабельность кода. Вот только, сколько волка не корми (хуками, воркерами, composition_api, virtualDOM, SSR, и прочими костылями), он все равно Null объектом считает ;)
Привет!
Не нашёл твоей телеги в описании.
Плюс, у тебя сайт упал:
Error establishing a database connection
Телега в описании и сайт поднялся 🙌
TypeScript вроде многое решает?
почти ничего ;)
Отсылки прикольные гы ) Хороший видос
Познавательный ролик на самом деле
Typescript в помощь
Отличное видео, все так и есть. А на языках, которые транслируются в js итак все пишут, тот же TypeScript.
Того гляди JS станет чем-то вроде байт-кода у Java или IL у C#.
Может байткодом станет webassembly, а не js?
@@thunderstorm7901 webassembly будет хз когда, а код на чем-то более приятном, чем js хочется писать уже сейчас.
У ES модулей есть замечательная особенность. Попробуйте в браузере динамически импортировать модуль у которого есть такой экспорт: export const then = () => console.log('Hello!')
имхо не все так грустно, мне после с# очень даже зашел js, поначалу только немного ох*ел, но теперь не хочется обратно на статику
Что с шарпом не так? Идеальный же язык
@@predaytorэмм, я не давал никакой оценки с#
Тоже ах*ел, когда начал изучать js (недавно), но только после полугода на плюсах) Но только не уверен, что захочется остаться, пока чувствую себя неуютно
@@DevilAlex03 попробуй typescript. Хотя он тоже не идеальный, со своими багами и особенностями (к примеру, когда проверяешь переменную на undefined и используешь ее во вложенной функции, тебе компилятор ошибку выдает и говорит что нужно опять проверить на undefined).
Если ты дотнетчик, то JS скоро не нужен будет. Когда выйдет релиз Blazor, можно будет на шарпе фронт писать. А вообще шарп почти идеальный язык.
Я не защищаю JS. Я его тоже НЕ люблю, но:
1.Я не понял проблему с Babel. Почему не использовать стандарт ECMAScript и не париться?
2.Про асинхроность на 8:28
const [result1, result2] = await Promise.all([task1(), task2()]);
3.Можна узнать браузер и железо через UAParser и подстроиться под пользователя.
4.TypeScipt решает проблемы с типами данных
Можно ещё проще, просто перенести авэйты в следующую строку, после выполнения ф-ий
а причем тут тайпскрипт блять?
Все сказанное, очень спорно. Сложилось впечатление, что это кликбэйт. Сам автор как будто не очень понимает, о чем говорит.
Гораздо справедливее отметить, например
typeof null === 'object'
[1, 2] + [3, 4] === '1,23,4'
Вот это действительно странно. Но и у этого есть обьяснения
Но чем например чисто технически отличается класс в JS от класса в Java?
В Js класс нифига не класс) это функция а вообще объект))
Может не все еще в курсе, оставлю это здесь :
['1', '7', '11'].map(parseInt);
Winderton))
земля пухом
Прошу ознакомиться как хранятся данные с плавающей точкой, и вы поймете почему сложение дробных чисел будет давать такие результаты (подсказка = мантисса экспонента).
Георгий, многие это знают и понимают. Тем не менее это очень неудобно.
@@SeniorSoftwareVlogger Согласен. Спасибо за ответ. Может я не так сформулирован комментарий. Это посыл к нашей общей боли - товарищей которые вошли в "айти" по курсам, и в большинстве случаев не знаю базы и не очень хотят развиваться. Если что то извините.
Ничего нового, но жизненно. Рад что мою боль понимают)
вот!!! наконец полезняк пошёл
Классное видео:)
про AWAIT -очень даже очевидно.!. для чайников js еще заставляет помечать функцию как async
в новой версии ето выпилить грозились
Привет! Теперь сними пожалуйста почему любишь JS!
его не за что люитть
@@DJamal1803есть ха, что браузеры развиваются и внедряют новые стандарты
Любить js - это как будто остаться со срашной девушкой на безлюдном острове)
@@xBesss Несмотря на это он лидирует в топ 3. Ежегодно между прочим. Можно сделать вывод , лучше уж со страшной но с умной , или с умеющей варить борщяк :с
@@ulargray4313 он в топе, потому что нет аналогов, фактически монополия среди языков)
Надо было назвать за что я люблю js)
Это название следующего видео 🧘♂️
Require, import это просто паттерн модуль, реализован через оборачивание кода в самовызывающиюся анонимную функцию. Что с этим то не так? Не хочешь export писать, ну заворачивай в такие функции, а то вдруг уберут из стандарта)
Классы в js всё же имеют отличие от функции с прототипом. Попробуйте вызвать конструктор класса без оператора new.
класcное выступление на e3)
"Как я вас понимаю")))
при всем уважении к автору, передача объектов по ссылке - это Фундаментальная особенность большинства языков программирования. Это быстрее, чем передача по значению (плюс учтите необходимость глубокого копирования объекта) и позволяет менять объект на вызывающей стороне.
Да-да и автор рассказывал про это в видео про чистые функции. Фундаментально, да. Быстрее, да. Проще реализовать, да. Пинает программиста под зад, тоже да.
Ты сторонник одинарных кавычек или двойных?
Только двойные
@@SeniorSoftwareVlogger Уважаю! Поддерживаю!
Я его дпуг. Он сторонник только двойных кавычек, а также 4х пробелов вместо табуляции.
Даааа, только двойные! не привык к одинарным))
у isNaN еще есть прелесть, если в него передать строку isNaN("hello") > true
Для этого придумали Number.isNaN
так глобальный isNaN преобразует аргумент в число, а hello - нечисловая строка
@Alexander Borisenko да не, я без предъяв) глобальные функции в новых спеках постепенно переезжают в статические методы Number.
Мне с -дивана- бэкенда показалась хорошая идея компиляции программ с другого языка на js. Типа как в react, angular, scalajs и куче других подобных. По крайней мере для тех, кто предпочитает компилируемые языки.
Долгоиграющие проекты - это везде похоже боль.
Ну по поводу погрешности в 0.1 + 0.2 = 0.300..04 это тут дело не в самом JS, а в машинной точности. Это рядовая проблема из-за того, что такие числа как 0.1 в двоичной системе счисления не могут быть представлены конечным количеством бит из-за своей периодичной сущности.
Спасибо за видео 🖤
Вы работали с ангуляром? Есть возможность посоветовать книгу/курс? Буду очень благодарен.
Всех благ!
Александр Смуров сейчас наверное скажу неприятную для тебя вещь ,но если ты знаешь основы языка, то иди скачивай Фреймворк , открывай доку и практикуйся. Напиши в начале авторизацию ,подёргай какие-то апишки. Придумай себе задачу (мини пэт проект) и попробуй его написать. Примеров как писать на нагуляно можешь на гитхабе поискать
про плавающие числа и передачу по ссылке пророфлил, причем тут js вообще.
в старых языках и с# есть структуры которые копируются
- А давайте возьмем самый отсосный язык програмированния, написанный за 10 дней и сделаем его единственным для разработки самой быстрорастущей и доступной платформы
- А давайте!
(шел 1995 год, никто ничего не знал)
А ведь был шанс получить Бейсик вместо Джаваскрипта! Да здравствует Брендон!
google последний митап сказали что про числа поправили
О, а можно ссылку?
Да, тоже хотелось бы. Это было бы реально круто!)
@@SeniorSoftwareVlogger ruclips.net/video/c0oy0vQKEZE/видео.html
Пересмотрел..там чуть другое XD
А мне нравится js.... наверно потому что я больше ничего не знаю 😜✌
Та же хрень с питоном)
Тема с числами не только с js. Многие популярные языки используют один и тот же стандарт IEEE-754 - все он виноват, а не js)
А для чего это нужно?
@@BohdanVR666 компьютеры не умеют точно вычислять числа с плавающей точкой (натуралтные). Для обхода этого используют приближенные вычисления, до определенного знака. IEEE-754 описывает как раз способ вычисления натуральных чисел. И т,к, это приближенные вычисления, то они дают подобные артефакты
почему не TypeScript?
Почему я ненавижу джаваскрипт, но не тайпскрипт?
@@SeniorSoftwareVloggerнеее )) Почему не писать на TypeScript раз JS убогий. Он и для меня извращенский. Поэтому предпочитаю на TypeScript
Дима, спасибо! Сталкиваюсь с ЖС по столку поскольку (15-25% рабочего времени) и этого всего не знал, а тут так сжато, и доходчиво по подводным камням - самое то.
Сделай пожалуйста нечто похожее про Руби\Рельсы, Я думаю не Я один кому это интересно, спасибо.
Почитайте learn.javascript.ru
Если вы используете js под 3 рабочего времени такие вещи знать уж точно нужно)
ну как по мне babel - единственное решение, когда в мире столько браузеров и они не унифицированы. А что делать то? Как быть с internet explorer?
сори я полный нубас, но я слышал краем уха, что в новом бабеле убрали стейджи, я заблуждаюсь?
можно и так сказать, сегодня все плагины ставить нужно отдельно, и сказать бабелю какие браузеры/версии ноды хочешь поддерживать. На основании этого он сам определяет какие фишки компилить, а какие можно оставить
костыль на костыле костылем накостыляет
Звук слабый. Спасибо за видео.
Это где он слабый? Давно у ЛОРа были на приеме ?
@@олегспирин-р4р уважаемый, спасибо за заботу к моему здоровью. С слухом все отлично.
Супер!
Спасибо вам за столь информативные влоги. Скажите пожалуйста, в Германии берут на работу программистов без профильного высшего образования? есть гражданство еврпейской страны
Берут, опыт важнее если программистом
Еще бы про TypeScript упоминуть бы было не плохо.
Это такой же костыль
@@ivansidorov5 Мозг твой костыль, TypeScript отличный объектно ориентированный язык.
@@mivnvi.4685 github.com/microsoft/TypeScript/issues куча проблем TS. норм только для HelloWorld и Junior задач , когда используешь в фреймворке с современными фичами - там полно говна всплывает. не всегда типы подсказывает. тормозит, зайди в русское сообщество в телеге, все дерьмом поливают его, крмое джунов которые написали (a:number, s:string) и думают что у них в проекте Ts)))))00
@@mivnvi.4685 Если и хочется типизации качественной, то вали из JS и бери нормальный язык, ане обмазывайся костылями. ты считаешь TS нормальным языком, потому что тебе не с чем сравнивать. и да ООП не нужен в 2019 году в JS) ты отстал от жизни.
@@ivansidorov5 чем тебе типизация TS не угодила? Приведи хоть 1 факт. Если TS объектно ориентированный это не значит, что на нем не пишут в функциональном стиле. Ты типичный ретранслятор, который слепо пересказывает чужое мнение.
Крутое видео!
Правильно сказал! Зачем писать на JavaScript, если все равно он будет компилироваться на JavaScript??? Буду писать на своём любимом c# используя blazor. Вот еще приближается net core 6 который добавить ещё больше фичи для него