Deleted
ну в целом да так сейчас и делаю хотя это уже немного разные вещи и подходы к тому, что такое конструктор и зачем он нужен... свое видение я уже изложил для меня все-таки конструктор - это полноценный создатель а не я ему это создай, принеси я лишь указываю параметры и дальше хочу, чтобы он сам по ним все сделал, а я пойду подожду и займусь другими делами мне такой подход клиента ближе
>свое видение я уже изложил для меня все-таки конструктор - это полноценный создатель конструктор это инициализатор памяти объекта, всегда синхронный и не кидающий ошибок (в идеале) >свое видение я уже изложил для меня все-таки конструктор - это полноценный создатель путаница терминов - то что ты говоришь это либо паттерн фабрика либо паттерн строитель но не конструктор
Дмитрий
const car = await Car.create(red,model1)
допустим, а как в таком случае делать наследование? SuperCar extends Car
Дмитрий
" (в идеале)" вот только реальность обычно немного иная и далека от идеала) у нас тут костыли на костылях) поэтому миром скорее правит прагматизм нежели идеализм) а к последнему мы больше стремимся по мере возможностей)
Deleted
Deleted
лучше не так давай конкретный пример
Дмитрий
дак вон выше есть пример с машиной же я хочу от нее сделать наследника - ну и как мне это сделать?
Дмитрий
ага еще за классы надо увольнять кажется тут многие так думают)
Дмитрий
const car = await Car.create(red,model1); ну я все про это говорю: тут ты используешь create для Car, а я решил расширить класс Car и создать SuperCar ну и как тогда мне это сделать?
Deleted
const car = await Car.create(red,model1); ну я все про это говорю: тут ты используешь create для Car, а я решил расширить класс Car и создать SuperCar ну и как тогда мне это сделать?
тогда отделяй назначение метода create, на создание аргументов для конструктора const car = new Car(…(await Car.prepareCarArgs(red,model1)));
Deleted
в дочерних классах можно переиспользовать
Deleted
Также частный паттерн в таких случаях это init метод
Deleted
const car = new Car(red,model1) await car.init()
Дмитрий
ну да такой подход я сейчас и использую а дальше уже идет видимо вопрос идеологии... мы это уже ранее обсуждали, что я считаю, что лучше, чтобы было просто: const car = await new Car( red,model1 ); вместо const car = new Car(…(await Car.prepareCarArgs(red,model1))); потому что для себя не вижу лично почему нельзя использовать конструктор сразу для таких целей
Дмитрий
ну выкидывает у тебя создание объекта ошибку и что? try catch в помощь
Дмитрий
как будто это первая исключение в жизни
Дмитрий
не здесь так в другом месте же будет
Deleted
ну выкидывает у тебя создание объекта ошибку и что? try catch в помощь
почитай какая семантика использования исключений
Deleted
и что вообще такое исключительная ситуация
Дмитрий
я говорю не про семантику - я говорю про практику const car = new Car(red,model1) try await car.init() catch или try await new Car(red,model1) catch для меня это одно и тоже - только в первом случае еще лишняя строчка текста
Deleted
я говорю не про семантику - я говорю про практику const car = new Car(red,model1) try await car.init() catch или try await new Car(red,model1) catch для меня это одно и тоже - только в первом случае еще лишняя строчка текста
семантику таких понятий придумали не с потолка, а для качественного кода если бы конструкторы создавали риск исключения или асинхронные операции то код был бы слишком сложен для отлова ошибок и понимания что пошло не так
Дмитрий
что сложного в try catch? и еще раз говорю, что использовать его все равно ведь придется - вопрос лишь где
Deleted
тебе бы в Scala
Deleted
раз ты прямо так любишь лаконичность
Дмитрий
и как по мне понятнее использовать его на первом и единственном методе
Дмитрий
и да я специально говорю не о классах, а об асинхронных классах, потому что кто не понимает как работает асинхронные методы - пусть лучше их и не использует тогда но для меня создание должно быть асинхронным
Дмитрий
и да с await и try-catch писать код не так уж сложно в почти синхронном стиле - вопрос лишь навыка человека и его понимания
Дмитрий
но все равно что такое класс - это функция-создатель и раз уж появились асинхронные функции я хочу лишь по логике иметь и аснихронную функцию-создатель
Дмитрий
"ты большие проекты писал?" ну как сказать... кода у меня много и асинхронного, поэтому вот и думаю, как мне его сделать более удобным... но с другой стороны опять же вопрос определений - назвать это большим проектом пока тоже наверно нельзя...
Дмитрий
нет наверно пока поменьше у меня куча модулей - каждый из них небольшой и в том и суть, что все грузится, выполняется асинхронно, поэтому количество символов я особо не считал я за количеством никогда не гоняюсь - меня больше интересует качество скорее
Deleted
>я за количеством никогда не гоняюсь - меня больше интересует качеством скорее эм
Deleted
ладно, было весело, но я пошел
Дмитрий
ладно давай
Дмитрий
хотя я так и не услышал, чем ошибка в init лучше, чем в new - только потому что ты ее там не ожидаешь? ну это лишь вопрос как я уже сказал понимания того с чем работаешь)
Дмитрий
вообщем все упирается как я понял в стереотипы, идеологию и семантику...
Дмитрий
давно уже заметил что в ит конечно много лишнего мусора, который с трудом чистят...
Дмитрий
есть противник и классов и методов await и те кто готов писать 1000 строк кода вместо пары лишь бы не использовать не любимые им паттерны или не совпадающие с ними по взглядам подходы
Дмитрий
ладно неважно - мое дело предложить) но надеюсь все-таки найдутся сторонники моего решения, как по мне оно все-таки более удобное нежели иные, но да это лишь мой взгляд на ситуацию😒
Дмитрий
кстати никто не в курсе, а какие мировые чаты по js есть?🤔
Konstantin
меня тут засунули в какой-то
Konstantin
@hellojschannel
Дмитрий
это канал) я же говорю про чаты😅
Андрей
Попробуй описать что такое асинхронной выделение памяти. И будет норм.
Дмитрий
Ты используешь не те инструменты для решения собственной задачи.
скорее я предлагаю создать новые инструменты для работы с асинхронными объектами через классы, что на мой взгляд удобнее)
Дмитрий
ну вообще подразумеваю объект, который обладает асинхронными свойствами - обещаниями часть обещаний я предлагаю получить сразу при создании new, если это нужно часть обещаний можно получить потом, если это опять же нужно
Дмитрий
в смысле где хранится объект? особой разницы с обычным объектом я не вижу просто часть свойств неопределена и может быть получена позже
Дмитрий
ну или при создании
Дмитрий
ну можно и так сказать: я пишу для понимания что асинхронным объектом для простоты я назвал объект с обещаниями и весь вопрос лишь в том, чтобы эти обещаниями можно было получить сразу при создании объекта через new
Дмитрий
пока же вся проблема только в идеях в головах других да придется подождать да возможно будут ошибки но в любом случае - придется ждать и будут ошибки почему не в new я так и не понял
Андрей
Вот твой асинхронный конструктор.
Дмитрий
эм ты сейчас сказал какую-то странную фразу? если нет объекта, что с ним делать? ничего ясно дело может стоит подождать пока он создаться?
Дмитрий
для этого собственно и есть ключевое слово - await
Андрей
Дмитрий
new_car = await new car('red');
Андрей
new_car = await new car('red');
Ок в это время другая функция хочет работать с твоей машиной.
Андрей
Поэтому конструктор должен быть синхронным.
Дмитрий
еще раз говорю с чем работать? объект еще не создан
Андрей
еще раз говорю с чем работать? объект еще не создан
Ок. Одновременно создаётся 2 объекта.
Андрей
Какой оставляем?
Дмитрий
в смысле создается два объекта? как именно? мы можем создвать их как параллельно - так и по очереди
Дмитрий
все зависит от твоих задач
Андрей
Дмитрий
мы можем создвать так Promise.all а можем создавать так await obj1 await obj2
Дмитрий
а каком случае идет речь?
Дмитрий
я не понимаю твоей задачи
Андрей
мы можем создвать так Promise.all а можем создавать так await obj1 await obj2
А можем создавать в замыкании асинхронный объект.
Андрей
Из 2 разных функций, которые выполняются по порядку.
Дмитрий
все равно не совсем могу понять о чем именно речь можешь написать в виде кода
Андрей
Будет долго, так как я с телефона. Но ок, сейчас напишу.