Андрей
let a = null const f1 = async () => a = await new B() const f2 = async () => a = await new C()
Андрей
И после через promise.all вызываем эти 2 функции.
Deleted
я снова тут, и влезу со своими пятью копейками
Андрей
Что будет в А?
Дмитрий
те ты пытаешься создать один и тот же объект из разных функций?
Deleted
let a = null const f1 = async () => a = await new B() const f2 = async () => a = await new C()
это не реальный пример и в каком то смысле race condition
Deleted
в продакшн такой код не ушел бы
Дмитрий
угу это неверный подход просто
Андрей
Мде... Давайте в языке упростим возможность косячить?
Дмитрий
это вопрос архитектуры кода и да я лично очень за то, чтобы исключать как можно больше ошибок автоматом
Deleted
Мде... Давайте в языке упростим возможность косячить?
я если что асинхронные конструкторы не защищал, а наоборот но контраргумент выше был не очень)
Deleted
это вопрос архитектуры кода и да я лично очень за то, чтобы исключать как можно больше ошибок автоматом
знакомы понятия цикломатическая сложность? побочные эффекты? мутабельность? и тд
Дмитрий
знакомы понятия цикломатическая сложность? побочные эффекты? мутабельность? и тд
ну от части - тем более, если перевести эти определения в пару фраз особой сложности тогда вообще не вижу
Дмитрий
зачем от кода добиваются детерминизма?
ну если я правильно понял о чем ты - для большей логичности полагаю
Deleted
ну если я правильно понял о чем ты - для большей логичности полагаю
код и так логичен, языки программирования построены на логике
Дмитрий
ну да кажется я тут в сементический ад попаду) логика бывает разная)
Дмитрий
так что в иди туда - не знай куда тоже может быть свой логика)
Дмитрий
только ее понятность нам будет менее очевидна)
Deleted
какими качествами должна обладать строчка кода чтобы быть детерминированной?
Дмитрий
я бы вообщем заменил на слово - понятной мне кажется так было бы проще)
Deleted
const car = await new Car(‘red’) ты можешь для всех случаев выполнения программы сказать какой будет результат?
Deleted
Это зависит от конструктора Car. И await тут не нужен.
если есть await значит есть побочный эффект
Дмитрий
а почему нет? если изначально знаешь алгоритмы класса
Deleted
а почему нет? если изначально знаешь алгоритмы класса
куда твой асинхронный конструктор стучится?
Dika
Deleted
В await 0 есть побочный эффект?
это вообще запустится?
Dika
это вообще запустится?
Да. await может принимать любое значение, не только промис.
Deleted
Да. await может принимать любое значение, не только промис.
тогда нет потому что он раскладывается на константу и await там не нужен значит не реальный пример
Дмитрий
"куда твой асинхронный конструктор стучится?" не совсем понимаю вопроса... что значит стучится?
Dika
тогда нет потому что он раскладывается на константу и await там не нужен значит не реальный пример
await не нужен, потому что функция, вызванная с new, априори не может вернуть промис
Deleted
await не нужен, потому что функция, вызванная с new, априори не может вернуть промис
почитай сообщения выше мы тут странные идеи Дмитрия обсуждаем
Дмитрий
ничего странного в них нет - разве что вам непривычно ну так я и предлагаю это сделать для тех кому нужно
Deleted
"куда твой асинхронный конструктор стучится?" не совсем понимаю вопроса... что значит стучится?
асинхронные операции нужны для асинхронного ввода вывода как правило это либо файловая система либо обращение в интернет
Дмитрий
либо обработка скрипта
Дмитрий
либо обработка картинки
Дмитрий
и много чего еще
Deleted
в твоем случае что?
Дмитрий
да чего только там нет... изначально вообще загрузка модулей под нужны класса в зависимости от параметров создания
Deleted
так
Deleted
давай начнем вот с чего
Deleted
знаешь методологию SOLID в ООП?
Deleted
первый принцип S - Single responsibility principle
Дмитрий
так класс и не меняется
Deleted
так класс и не меняется
дай пример реального асинхронного конструктора
pa[aad
принцип единственной ответственности
Дмитрий
я уже приводил пример насчет машины у нее есть конкретное описание, но например отдельные элементы просто определены в виде обещаний поэтому будут ли они загружены или нет - зависит от параметров
Deleted
async class Car{ constructor(color...){ [this.part1, this.part2, this.part3] = await Promise.all([ get_path1(color1), get_path2(color2), get_path3(color3), ]); }}
Deleted
это?
Дмитрий
ну типа того да
Deleted
что значит твое get_path2?
Дмитрий
ну какая-нибудь часть машины
Дмитрий
или ты про что имеешь в виду - текстура например
Deleted
Почему машина ищет свои части?
Дмитрий
load_texture
Дмитрий
так лучше?
Deleted
да, но все еще почему машина сама ищет свои текстуры? если это отдельный класс
Дмитрий
не совсем понимаю вопросов порой... мы хотим создать машину через конструктор класса и указываем нужные нам парамертры для этого дальше конструктор смотрит, что заказал клиент(объект) и создает нужную нам машину под эти параметры для этого заказывая нужные материалы
Deleted
если это машина - то ты должен в конструкторе предоставить все материалы
Дима
Если это машина — то после чертежа обязан сразу показать готовую тачку
Дмитрий
кому должен? для меня это стереотип почему я должен конструктору предоставлять все материалы? если я могу просто указать то, что мне нужно
Deleted
кому должен? для меня это стереотип почему я должен конструктору предоставлять все материалы? если я могу просто указать то, что мне нужно
пятый принцип в ООП D - Dependency inversion principle “Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.”
Deleted
переводя на простой язык, в конструктор должны поступать готовые данные
Дмитрий
я понял эту идею, но я не понимаю ее значения как по мне гораздо удобнее, если конструктор берет на себя всю работу в чем тут возникают проблемы можете мне пояснить?
Deleted
я понял эту идею, но я не понимаю ее значения как по мне гораздо удобнее, если конструктор берет на себя всю работу в чем тут возникают проблемы можете мне пояснить?
>в чем тут возникают проблемы можете мне пояснить? все эти принципы придумали только для одного чтобы контролировать сложность исходного кода если их не соблюдать - то по ходу роста проекта, исходный код будет очень сложно понимать
Дмитрий
как по мне как раз таки сложность растет когда вместо просто создать - нужно применить пустой инит
Дмитрий
или когда опять же нужно самому лишний раз что-то готовить
Дмитрий
это как раз упрощает программирование
Deleted
если и так не поймешь - могу отправить читать литературу
Дмитрий
вопрос зачем они нужны?
Дмитрий
зачем нужен пустой инит?
Дмитрий
чтобы был?