Новые переменные в JavaScript!

  Рет қаралды 25,277

Как пройти в IT?

Как пройти в IT?

Күн бұрын

Давненько в JavaScript не появлялись новые способы объявления переменных.
И вот пожалуйста! Разбираемся с using!
Мой Telegram канал:
t.me/howToLearnIT
HolyJs 11-12 ноября в Питере:
holyjs.ru/
0:00 Какая проблема с var, let, const?
0:58 Что за зверь этот using?
1:52 Рефакторим код
3:14 А если закрытие асинхронное?
4:11 Приходите на конфу
#javascript #frontend

Пікірлер: 103
@Dadadadam999
@Dadadadam999 8 ай бұрын
Ура, спустя столько времени using из C# реализовали в JS. Это правда круто, без сарказма.
@mastnova2676
@mastnova2676 8 ай бұрын
бедные джуны, разбираться с js становится все сложней))
@aph1le
@aph1le 8 ай бұрын
))))
@user-hl3zj2yf6e
@user-hl3zj2yf6e 8 ай бұрын
Когда такие подходы внедряют это превращается код-катастрофу)))
@mikleSmart
@mikleSmart 8 ай бұрын
согласен, await, который исполняется в конце функции, это брррр
@nade3282
@nade3282 8 ай бұрын
какие такие? using должен быть в каждом языке программирования
@enter0prise
@enter0prise 8 ай бұрын
Попытка добиться той же самантики без них нагенерирует куда более улётный код.
@AbraKadabra000
@AbraKadabra000 8 ай бұрын
​@@enter0priseда просто ещё одна обёртка простила над уже имеющейся. Уверен что под капотом там просто try finally полифилится
@enter0prise
@enter0prise 8 ай бұрын
​@@AbraKadabra000 Ну полифилится и полифилиться, не руками писать же) Наивный try-finally работает иначе в случае, если возникает исключение в finally-блоке. В тексте пропозала есть сравнение, как две строчки с using превращаются в 1,5 экрана семантически эквивалентного кода на try-finally.
@it2138
@it2138 8 ай бұрын
В телеграмм сюда: t.me/howToLearnIT HolyJs 11-12 ноября в Питере: holyjs.ru/ 0:00 Какая проблема с var, let, const? 0:58 Что за зверь этот using? 1:52 Рефакторим код 3:14 А если закрытие асинхронное? 4:11 Приходите на конфу #javascript #frontend
@mr_coif5418
@mr_coif5418 8 ай бұрын
Спасибо, что рассказал о новом виде переменных
@Magomed-r
@Magomed-r 8 ай бұрын
Спасибо за ваш контент!
@funnyenglish4330
@funnyenglish4330 8 ай бұрын
Ееее! Спасибо за новый ролик!👍🏼
@ilyasanders4169
@ilyasanders4169 8 ай бұрын
Спасибо, вроде using решили позаимствовать из С#
@MrPandaSmith
@MrPandaSmith 8 ай бұрын
Только в .NET disposable классы идут уже из коробки. А тут пиши обертки сам.
@enter0prise
@enter0prise 8 ай бұрын
@@MrPandaSmith Со следующим релизом ноды добавят, это не ломает обратную совместимость.
@Alex-dq9yk
@Alex-dq9yk 8 ай бұрын
По HolyJS: вообще реально было бы интересно послушать про устройство памяти и GC в JS. Но если это будет очередной чувак, который расскажет, что примитивы хранятся в стеке, а объекты в куче (в V8 это не так если что), то смысла от доклада будет мало, ибо чел вообще не до конца изучил тему. В общем жду
@seitbekir
@seitbekir 8 ай бұрын
Не странно и вполне привычно. Хорошая штука. Особенно, если пишешь свои либы. Щас попробую как оно работает наоборот.
@mental_master9003
@mental_master9003 8 ай бұрын
Автор , как называется тема для VScode ?
@azerqgaming
@azerqgaming 8 ай бұрын
Майкрософт берет фичи из c# и вставляет их в Typescript?
@zloynightmare
@zloynightmare 8 ай бұрын
да
@wennerryle1768
@wennerryle1768 8 ай бұрын
Самое лучшее объяснение using эвер!
@enter0prise
@enter0prise 8 ай бұрын
Воооо, теперь и на собесах по JS будут спрашивать dispose pattern (=
@DzhigurdaAnton
@DzhigurdaAnton 8 ай бұрын
Интересное видео
@user-qc8ic8tb3x
@user-qc8ic8tb3x 8 ай бұрын
Ну заголовок все равно желтый. Переменные в JS это только let и var. А using это декларация, которая создает константу, которая реализует Dispose pattern. Возможно я душню, но так можно и await назвать переменной.
@user-uz4gd4gp8r
@user-uz4gd4gp8r 8 ай бұрын
"Переменные в JS это только let и var" - а как же const? или она тоже не считается переменной?
@user-qc8ic8tb3x
@user-qc8ic8tb3x 8 ай бұрын
@@user-uz4gd4gp8r не, это константа :) Переменные в переводе с англ это - variables, т.е. изменяемая/переменная величина.
@danilka6295
@danilka6295 8 ай бұрын
никаких переменных в джаваскрипте нет
@user-qc8ic8tb3x
@user-qc8ic8tb3x 8 ай бұрын
@@danilka6295 хорошо
@chikenmacnugget
@chikenmacnugget 8 ай бұрын
@@danilka6295и констант тоже
@alex_xplus7135
@alex_xplus7135 7 ай бұрын
Подскажите пожалуйста, что у него за стиль vs кода?🤤 Это же просто КАЙФ❤
@starwalker.odessa
@starwalker.odessa 8 ай бұрын
Изобрели destructor 😋!
@enter0prise
@enter0prise 8 ай бұрын
using - это атрибут переменной, а деструктор относится к объекту. В JS смерть переменной не означает синхронную смерть объекта. Не отметили using - ресурс утёк.
@simplet4ch
@simplet4ch 8 ай бұрын
Подскажите пожалуйста, а что за тема для vscode?
@qqjjqj
@qqjjqj 8 ай бұрын
Ctrl + Shift + P => Preferences: Color Theme => Dark High Contrast
@tihunvolkov9288
@tihunvolkov9288 8 ай бұрын
прикольно
@sad_god
@sad_god 8 ай бұрын
а если функция асинхронная то будет await using file = await openFile читается как билиберда
@enter0prise
@enter0prise 8 ай бұрын
Это вы еще не видели циклы *for await (await using x of y)*
@fresonn
@fresonn 8 ай бұрын
Что-то вроде defer в golang
@siarheilabetsik5658
@siarheilabetsik5658 6 ай бұрын
await using - это вообще что?! Ждем await let и await const?
@9mikaela
@9mikaela 8 ай бұрын
ура, изобрели RAII
@Slavasil
@Slavasil 8 ай бұрын
ахахахаха такую фичу уже даже в lua 5.4 успели добавить)
@Lelouch-
@Lelouch- 8 ай бұрын
Чтооо джсерам наконец выдадут with case?
@akaikangaroo
@akaikangaroo 8 ай бұрын
Это же по сути финализатор. Я немного удивлена, что в JS они только что появились, когда в той же Луа эти финилизаторы еще со времен динозавров существуют. Разве не в любом динамически типизированном языке эта фича обязана быть изначально?
@enter0prise
@enter0prise 8 ай бұрын
Ключевое отличие финализаторов - они исполняются перед уничтожением объекта сборщиком мусора (что происходит неизвестно когда и происходит ли вообще), а using - не позднее четко обозначенного момента в коде.
@akaikangaroo
@akaikangaroo 8 ай бұрын
@@enter0prise Можно принудительно вызвать сборщик мусора. Это, конечно, слегка накладно,так что да, в целом я поняла почему using это практичнее🙂
@enter0prise
@enter0prise 8 ай бұрын
@@akaikangaroo Чтобы вручную звать GC, нужно десять раз подумать, а ради одного объекта - это вовсе безумие)
@user-bn5sr6nu7u
@user-bn5sr6nu7u 8 ай бұрын
Этот пример для контента или проверить входной параметр path до открытия файла религия не позволяет?
@user-vu6hn4ul2i
@user-vu6hn4ul2i 8 ай бұрын
В данном примере - да. Но периодически возникают сложные кейсы, где это может быть применимо. И что, нужно было такой кейс воспроизвести, объяснить, что тут к чему и почему? Для наглядного примера - годится.
@melonges7884
@melonges7884 8 ай бұрын
А если я склонирую объект, то произойдет double free?
@enter0prise
@enter0prise 8 ай бұрын
Глубокое копирование владельцев ресурсов - это плохая идея, там будет и doble free, и попытки использования закрытого ресурса. Не надо нарушать инкапсуляцию)
@vas_._sfer6157
@vas_._sfer6157 8 ай бұрын
@@enter0prise А если передача в другую функцию или запись во внешнюю память?
@enter0prise
@enter0prise 8 ай бұрын
​@@vas_._sfer6157 Передавать ссылку. Но в целях абстракции, а не для параллельного использования двух ссылок. А насчет записи: зачем? Дескрипторы файлов, соединения с БД, сетевые сокеты и т.п. обычно используется либо как отдельные пулы, которые фасадируют и сами управляют временем жизни ресурсов, либо в короткоживущих сценариях, вроде: "открыл-записал-закрыл". Во втором случае using будет удобен, т.к. ссылка на объект становится недоступна ровно в тот момент, когда ресурс закрывается и вероятность использования "закрытого" сводится к нулю, а срок жизни очевиден "от сих, до сих".
@vas_._sfer6157
@vas_._sfer6157 8 ай бұрын
@@enter0prise Не, я не про это. В Rust или С++ и C# мне понятно как работает подобный механизм. А как он работает в js? Что будет если обратиться к using JS объекту после выхода из функции?
@enter0prise
@enter0prise 8 ай бұрын
@@vas_._sfer6157 Ничего неожиданного - объект будет продолжать жить (пока есть сильные ссылки), а ресурсы будут уже освобождены.
@aleksd286
@aleksd286 8 ай бұрын
Надеюсь плюшки от организаторов не повестки в военкомат 😂
@sorry4206
@sorry4206 8 ай бұрын
using из c# и try with resources из java
@user-qc8ic8tb3x
@user-qc8ic8tb3x 8 ай бұрын
А еще defer из golang и with из python
@user-wz5lf1vo6h
@user-wz5lf1vo6h 8 ай бұрын
О, в скрипты занесли RAII
@Milk-gw1zl
@Milk-gw1zl 8 ай бұрын
Мде, а каким мокаром у нас не малая часть серверов на js, где такая простая фича только щас появилась...
@enter0prise
@enter0prise 8 ай бұрын
Афтар, почему бы в описание не закинуть ссылку на пропозалы JS и TS?
@yuriy.kostenko
@yuriy.kostenko 8 ай бұрын
А при чем тут новый вид и обьявление переменных вообще? Разве нельзя обьявить переменную стандартным способом, а потом использовать ее в директиве using? В C# используется интерфейс IDisposable для этого и совершенно не важно обьявляете вы переменную прямо в юсинге или получили/создали где-то еще.
@enter0prise
@enter0prise 8 ай бұрын
В C# объявление переменной с using требует указания типа/var, в JS требования писать using let нет.
@AlexAlex-mq6sg
@AlexAlex-mq6sg 8 ай бұрын
Прям как в c#
@azerqgaming
@azerqgaming 8 ай бұрын
У себя же посмотрели) А вообще, .net в последнее время тоже радует.
@B_G_V
@B_G_V 8 ай бұрын
Что за оператор ??=, первый раз такой вижу.
@ArtyomSamsonchik
@ArtyomSamsonchik 8 ай бұрын
Ищи Nullish coalescing assignment на mdn
@B_G_V
@B_G_V 8 ай бұрын
@@ArtyomSamsonchik так это вроде не он. Nullish просто два вопросительных знака. А тут ещё знак равно и это немного сбивает с толку.
@ArtyomSamsonchik
@ArtyomSamsonchik 8 ай бұрын
@@B_G_V оператор ?? - это nullish coalescing operator. А ??= - это nullish coalescing assignment. Есть еще операторы ||= (logical AND assignemnt) , &&= (logical OR assignment) с похожим поведением. Все эти операторы описаны на mdn
@B_G_V
@B_G_V 8 ай бұрын
@@ArtyomSamsonchik понял, спасибо ответ. Я еще новичок в программировании. Про coalescing знал, а вот про coalescing asingnment не приходилось слышать.
@user-ir5is7iq8e
@user-ir5is7iq8e 8 ай бұрын
Var; eval();😵
@_ahsiA
@_ahsiA 8 ай бұрын
Ого, деструкторы. Никогда такого не было и вот опять
@yuriy.kostenko
@yuriy.kostenko 8 ай бұрын
Это не деструкторы. Совсем не они, хотя и похоже.
@yaroslavoz
@yaroslavoz 8 ай бұрын
На пітєрджиес будет тема "новьіе фичи в инструментарии террористов", "топ-3 метода сделать жизнь соседних с атечествам стран невьіносимой"?!
@Desiop
@Desiop 8 ай бұрын
Сделали бы поддержку C# в браузере, был бы кайф для разработчиков
@enter0prise
@enter0prise 8 ай бұрын
Обрати внимание на Blazor WASM
@yauhenitsur1708
@yauhenitsur1708 8 ай бұрын
Собачий кайф*
@vas_._sfer6157
@vas_._sfer6157 8 ай бұрын
C# далеко не самый приятный язык.
@user-ix3ic4jc2s
@user-ix3ic4jc2s 8 ай бұрын
@@vas_._sfer6157 а чем он неприятный то? Самый обычный Си подобный типизированный язык, для новичков самое то
@user-ix3ic4jc2s
@user-ix3ic4jc2s 8 ай бұрын
@@enter0prise редкостный нежилой фрейворк, который пилить и пилить
@Serega5j
@Serega5j 8 ай бұрын
да шош ты орёшь так?
@DemetriyArh
@DemetriyArh 8 ай бұрын
const file = ...; doFile(file); close(file); не благодари
@enter0prise
@enter0prise 8 ай бұрын
doFile выбрасывает исключение и ресурс утек.
@DemetriyArh
@DemetriyArh 8 ай бұрын
@@enter0prise и то верно. Ну да, try catch Хотя всёравно не так жутко как в примере.
@enter0prise
@enter0prise 8 ай бұрын
@@DemetriyArh Там тоже есть нюансы) Рекомендую почитать оригинальный текст пропозала, там приводится эквивалент одной строчки с using, замененной на полтора экрана кода с try.
@zzzzzzz...3380
@zzzzzzz...3380 8 ай бұрын
close(file) надо будет писать в каждом бренче с return, это нарушает драй и эрор порн как сказано в видео
@vladwolf444
@vladwolf444 8 ай бұрын
Выглядит как костыль
@delir0
@delir0 8 ай бұрын
Кажется это самый убогий способ имплементации RAII из всех что я видел
@Endo_Resu
@Endo_Resu 8 ай бұрын
Очень плохая идея. Слишком сильно ломает логику понимания того, как должен работать написанный код. не goto, но всё же js/ts и так кривущуй, "асинхронность" - одна из самых слабых его сторон, а вместо её исправления, ухудшают новым сахаром. Нет бы подправить математику, избавиться от старого мусора в коде... чтобы не было вопросов: ts меня кормит, я его очень люблю, но это не отменяет того факта, что он уродливый и кривой :)
@BombaBomba-wf8vn
@BombaBomba-wf8vn 8 ай бұрын
Как начинающий фронт Устал слышать каждый день подобные новости. Тупо через день выходит новинка в css ещё и js которое я наверняка должен потом учить, плохое предчувствие
@djangodev3191
@djangodev3191 8 ай бұрын
Какое же JavaScript ...авно
@aquinary.
@aquinary. 7 ай бұрын
Но мы его любим
@dimonlimon1770
@dimonlimon1770 6 ай бұрын
Как твой рот)
@kumb61
@kumb61 8 ай бұрын
Зачем ска захламлять язык новыми ключевыми словами, которые пересекаются с другими яп и не несут смысловой нагрузки. Лучше бы модификатор к const/let добавили, по принципу срр. Все таки дебилы тотальные разрабатывают стандарт js, этот язык и так страдает от обилия устаревшего мусора.
@yuriy.kostenko
@yuriy.kostenko 8 ай бұрын
Какой модификатор?
@Fan-pm4vm
@Fan-pm4vm 8 ай бұрын
​@@yuriy.kostenkoprivate, public как я понял
Сколько стоит JavaScript?!?!
30:49
Как пройти в IT?
Рет қаралды 35 М.
Frontend заменит мобильную разработку? WTF?!?!
11:15
Как пройти в IT?
Рет қаралды 10 М.
HTMX заменит Frontend?! WTF?
12:12
Как пройти в IT?
Рет қаралды 110 М.
Гайд на собес Джаваскриптизёра!
13:16
Как пройти в IT?
Рет қаралды 29 М.
Как запрограммировать Чайник?!
12:27
Как пройти в IT?
Рет қаралды 17 М.
ПРОГРАММИСТЫ! ВСЕ СЮДА...
14:25
Winderton
Рет қаралды 305 М.
React заменит BACKEND? WTF?!?!
10:40
Как пройти в IT?
Рет қаралды 118 М.