@kotlin_lang

Страница 578 из 982
Kirill
12.03.2018
11:06:50
Помню что там и интерфейсов-то нет)

Igor
12.03.2018
11:07:16
(ну трейты)

Kirill
12.03.2018
11:07:24
(ну шутейки)

Вроде можно, но не уверен, т.к. не сталкивался

Google
Kirill
12.03.2018
11:08:16
это надо @eld0727 спросить)

Напомни, а в скале есть SAM для скала-интерфейсов?
А вообще котлин так-то не настолько функциональный, так что я бы не сравнивал

И меня лично не очень радуют люди которые тащат в котлин например котов

Igor
12.03.2018
11:09:47
А вообще котлин так-то не настолько функциональный, так что я бы не сравнивал
А при чем тут это. SAM это же костыль, мне просто интерстно, это только джава-костыль или еще где-то есть на JVM

Kirill
12.03.2018
11:10:35
да понятно что костыль, но таки удобный для ОО языков

в груви вроде есть

Kirill
12.03.2018
11:11:29
вот и получается - везде есть кроме котлина)

Igor
12.03.2018
11:12:04
Видать скала более ООП ?

Kirill
12.03.2018
11:13:22
засчитано)

Alexey
12.03.2018
11:15:16
Видать скала более ООП ?
Ну все мы поверх jvm вертимся

Konstantine
12.03.2018
11:25:41
Используя Moxy, при инжекте презентера, его надо делать lateinit?

Anton
12.03.2018
11:28:40
@kotlin_mobile

Google
Konstantine
12.03.2018
11:29:41
А есть варианты?
Вот я и спрашиваю. А то не очень люблю эти lateinit, может есть другой вариант. Как-нибудь с lazy, например.

Mikhail
12.03.2018
11:30:49
Вот я и спрашиваю. А то не очень люблю эти lateinit, может есть другой вариант. Как-нибудь с lazy, например.
ты можешь сделать PresenterHolder, в него инжектнуть lateinit и оттуда доставать через lazy, потом как намучаешься так делать, написать свой PropertyDelegate

Mikhail
12.03.2018
11:31:19
типа не пишешь lateinit в клиентском коде

плюс можно отлавливать NOtInitializedException и пробрасывать более узкое

Глеб
12.03.2018
11:31:49
А в чем проблема lateinit? А то, кажется, я упускаю что-то из виду, коли оно доставляет кому-то проблемы.

Mikhail
12.03.2018
11:32:20
Alexey
12.03.2018
11:47:25
Я щас конечно наброшу, но все эти инициализации через контейнеры - это такое себе

Старый добрый конструктор и никаких проблем

Alexey
12.03.2018
11:48:26
А все inject делают код сильно зависимым от "магии" контейнера

Konstantine
12.03.2018
11:51:50
Ужасный вопрос, да:)

Даниил
12.03.2018
11:53:21
Я щас конечно наброшу, но все эти инициализации через контейнеры - это такое себе
ну вообще есть такое мнение, да Бугаенко тоже об этом писал

http://www.yegor256.com/2014/10/03/di-containers-are-evil.html

Alexey
12.03.2018
11:54:39
Не упоминайте бугаенко в суе

Даниил
12.03.2018
11:54:54
другой вопрос что его the right way мне тоже не нравится, там как-то декомпозировать надо ящитаю шоб не было простыней таких при вызове конструктора

Alexey
12.03.2018
11:55:27
Каких простыней Оо

Google
Даниил
12.03.2018
11:56:13
Каких простыней Оо
ну посмотри по ссылке код под заголовком the right way

Konstantine
12.03.2018
11:57:01
final Agent agent = new Agent.Iterative( new Array<Agent>( new Understands( this.github, new QnSince( 49092213, new QnReferredTo( this.github.users().self().login(), new QnParametrized( new Question.FirstOf( new Array<Question>( new QnIfContains("config", new QnConfig(profile)), new QnIfContains("status", new QnStatus(talk)), new QnIfContains("version", new QnVersion()), new QnIfContains("hello", new QnHello()), new QnIfCollaborator( new QnAlone( talk, locks, new Question.FirstOf( new Array<Question>( new QnIfContains( "merge", new QnAskedBy( profile, Agents.commanders("merge"), new QnMerge() ) ), new QnIfContains( "deploy", new QnAskedBy( profile, Agents.commanders("deploy"), new QnDeploy() ) ), new QnIfContains( "release", new QnAskedBy( profile, Agents.commanders("release"), new QnRelease() ) ) ) ) ) ) ) ) ) ) ) ), new StartsRequest(profile), new RegistersShell( "b1.rultor.com", 22, "rultor", IOUtils.toString( this.getClass().getResourceAsStream("rultor.key"), CharEncoding.UTF_8 ) ), new StartsDaemon(profile), new KillsDaemon(TimeUnit.HOURS.toMinutes(2L)), new EndsDaemon(), new EndsRequest(), new Tweets( this.github, new OAuthTwitter( Manifests.read("Rultor-TwitterKey"), Manifests.read("Rultor-TwitterSecret"), Manifests.read("Rultor-TwitterToken"), Manifests.read("Rultor-TwitterTokenSecret") ) ), new CommentsTag(this.github), new Reports(this.github), new RemovesShell(), new ArchivesDaemon( new ReRegion( new Region.Simple( Manifests.read("Rultor-S3Key"), Manifests.read("Rultor-S3Secret") ) ).bucket(Manifests.read("Rultor-S3Bucket")) ), new Publishes(profile) ) );

?

Quantum Harmonizer
12.03.2018
11:57:10
простынь делает всё очевидным, собирает весь граф из кусочков, это круто

Alexey
12.03.2018
11:57:17
Quantum Harmonizer
12.03.2018
11:57:33
и уж точно лучше, чем @Qualifier, @Scope, вся эта срань

Даниил
12.03.2018
11:57:37
простынь делает всё очевидным, собирает весь граф из кусочков, это круто
ну хз, по мне так всё-таки разбить инициализацию было бы неплохо

я не говорю про DI-контейнеры с их магией

Alexey
12.03.2018
11:58:07
imho - вот right way val service1 = Service1( service2 = service2, service3 = service3, db = myDbInstance )

и тд

Даниил
12.03.2018
11:58:40
imho - вот right way val service1 = Service1( service2 = service2, service3 = service3, db = myDbInstance )
ну вот в коде выше так и есть, только всяких сервисов и прочего чуть больше двух)

Глеб
12.03.2018
11:58:44
и уж точно лучше, чем @Qualifier, @Scope, вся эта срань
Звучит почти также мудро, как совет с колбасой.

Alexey
12.03.2018
11:59:09
ну вот в коде выше так и есть, только всяких сервисов и прочего чуть больше двух)
Нет, он создаёт всё в стопку, я же предалаю создавать всё отдельно

Даниил
12.03.2018
11:59:12
ну ии ещё такой момент, что на практике через конструктор как я понимаю зачастую нужно будет фабрики, а не сами инстансы

Alexey
12.03.2018
11:59:26
Фааааабрики

Нет спасибо

Quantum Harmonizer
12.03.2018
11:59:29
Звучит почти также мудро, как совет с колбасой.
не знаю, что за колбаса, не могу оценить

Даниил
12.03.2018
11:59:38
Фааааабрики
ну а как без них

Google
Даниил
12.03.2018
11:59:44
если тебе нужно создавать объект не один раз

а per request скажем

Alexey
12.03.2018
11:59:53
() => service

Даниил
12.03.2018
12:00:01
ну это изоморфно фабрике)

Alexey
12.03.2018
12:00:11
Модульная структура

Quantum Harmonizer
12.03.2018
12:00:16
Фабрики нужны, когда они нужны, и не нужны, когда не нужны, давайте не переусложнять.

Даниил
12.03.2018
12:00:25
Модульная структура
вот тут уже не понял

Глеб
12.03.2018
12:00:26
не знаю, что за колбаса, не могу оценить
"Не правильно ты, дядя Фёдор, бутерброд ешь..."

Admin
ERROR: S client not available

Konstantine
12.03.2018
12:00:35
imho - вот right way val service1 = Service1( service2 = service2, service3 = service3, db = myDbInstance )
Шо то гавно, шо это. Оба способа выглядят так себе, но с inject'ами хотя бы код не выглядит как дерьмо. Имхо, конечно.

Quantum Harmonizer
12.03.2018
12:00:45
Mikhail
12.03.2018
12:00:58
акцент слегка не на том

Alexey
12.03.2018
12:01:33
вот тут уже не понял
Ну типо берешь такой, делаешь модули, где всё инициализируется и создаёшь на каждый запрос новый объект модуля и все дела

Mikhail
12.03.2018
12:01:44
DI фреймворки упрощают иньекцию через конструктор, во всяких там koin ты ту же простыню пишешь, но отдельно от места, где просишь зависимости

а вот иньекция в поля или методы - зло

но зло неизбежное, доколе мы пишем на фреймворках придуманных в прошлом десятилетии

Alexey
12.03.2018
12:02:49
Konstantine
12.03.2018
12:02:51
Просто создание отдельно всех объектов и их последующий проброс в конструктор и DI с инъекцией в конструтор - не одно ли и тоже)

Quantum Harmonizer
12.03.2018
12:03:04
А вариант не писать на них не рассматривается?
Куда ты денешься от Android Application Framework?

Google
Mikhail
12.03.2018
12:03:33
А вариант не писать на них не рассматривается?
я Android разработчик, для меня вариант не писать на фреймворке == смена профессии

Alexey
12.03.2018
12:03:43
Куда ты денешься от Android Application Framework?
А что там мешает писать нормально?

Даниил
12.03.2018
12:03:49
или лямбда возвращающая новый модуль, что есть по сути та же фабрика, только в профиль

Quantum Harmonizer
12.03.2018
12:04:06
А что там мешает писать нормально?
То, что мы сейчас обсуждаем. Лейтинит.

Mikhail
12.03.2018
12:04:09
А что там мешает писать нормально?
например то, что обьекты создает сам фреймворк, когда захочет

Alexey
12.03.2018
12:04:16
ну так у тебя будет фабрика модулей
Нет в имени Fabric - не считается

Даниил
12.03.2018
12:04:28
Valentin
12.03.2018
12:04:47
сорри

Alexey
12.03.2018
12:04:54
вообще-то Factory ?
Дада, я прост не умею во всю эту дичь

Mikhail
12.03.2018
12:05:12
считай ты вынес это полотно в отдельный factory method

Alexey
12.03.2018
12:07:45
Я прост хочу чтобы мир стал чуточку лучше :)

Konstantine
12.03.2018
12:07:57
Благо в магии ничего плохого нет. Явное, конечно, лучше неявного, но не надо перебарщивать.

Alexey
12.03.2018
12:08:39
Явно лучше, чем неявно - спорно, а вот компайл тайм лучше, чем рантайн - это априори

Даниил
12.03.2018
12:08:49
собсно сам факт того что всякие кодеины могут в рантайме NPE бросить меня совсем не радует

Страница 578 из 982