@kotlin_lang

Страница 579 из 982
Даниил
12.03.2018
12:10:10
Тест с dryRun
я с деревни, чё это?

Alexey
12.03.2018
12:10:25
Ага, а потом получаются всякие даггеры
Да у нас в скалке тоже есть подобная дичь с компайл тайм зависимостями, но это тоже сомнительная херня

Igor
12.03.2018
12:11:11
я с деревни, чё это?
Это значит написать unit-test (или интегрейшен, если хочешь без моков), который вызовет dryRun() и проверит форсированно весь граф

Google
Даниил
12.03.2018
12:12:50
собсно к "явное vs неявное" и "компайлтайм vs рантайм" добавлю ещё кое-что DI контейнер — это обычно ещё и, как правильно Егор пишет, глобальное мутабельное состояние что тоже "не очень" мягко говоря

Alexey
12.03.2018
12:13:30
это фича какого-то конкретного DI-контейнера?
Как я понимаю предполагается просто старт приложения сделать

Igor
12.03.2018
12:13:31
Это Koin, вангую что в кодеине так же можно сделать

Даниил
12.03.2018
12:14:02
ммм вангую что в кодеине такое невозможно

там нет графа как такового, это вообще сложно на самом деле DI контейнером назвать

он ничего не знает о зависимостях классов

по сути это просто такой словарь KClass -> инстанс/провайдер/фактори/что-то там ещё

Igor
12.03.2018
12:17:08
Хм, koin вроде тоже самое

Даниил
12.03.2018
12:17:12
поэтому с одной стороны там меньше магии чем в более навороченных DI-контейнерах, с другой — собсно, непонятно зачем его использовать, если можно руками в конструктор заинжектить

то есть получается то же самое (надо руками зависимости прописывать), только без кодеина будет типобезопасно, а с кодеином — нет



Mikhail
12.03.2018
12:19:35
то есть получается то же самое (надо руками зависимости прописывать), только без кодеина будет типобезопасно, а с кодеином — нет
а теперь представь, что тебе надо поменять инстанс какого-нибудь провайдера на другой в 10+ мест в приложении

Google
Даниил
12.03.2018
12:20:53
а теперь представь, что тебе надо поменять инстанс какого-нибудь провайдера на другой в 10+ мест в приложении
зафигачил бы фабрику и создавал бы инстансы через неё нужно что-то изменить — в одном месте меняешь фабрику в двух словах как-то так

Alexey
12.03.2018
12:21:27
Фремйворк из одного фабричного метода

Даниил
12.03.2018
12:21:43
да
только без кодогенерации и NPE

Фремйворк из одного фабричного метода
ну не одного а в худшем случае по фабрике на каждую сущность которую я хочу инжектить

Alexey
12.03.2018
12:22:55
я к тому что надо бы чекнуть значение слова фреймворк

Даниил
12.03.2018
12:23:05
да ясно что это не будет DI-фреймворком)

даже близко

Mikhail
12.03.2018
12:24:26
а потом ты бы сделал фабрику фабрик

Alexey
12.03.2018
12:24:27
В java мире вообще всё любят обзывать фреймворками

Фреймворк для сдвига строчки вправа

Mikhail
12.03.2018
12:24:50
и получился бы...

Даниил
12.03.2018
12:25:06
и получился бы...
получился бы не DI-фреймворк

Igor
12.03.2018
12:25:25
а потом ты бы сделал фабрику фабрик
@Harmonizr ну ты смотри “фабричный метод, фабричная фабрика - так и хочется леща дать” ?

Даниил
12.03.2018
12:26:27
а потом ты бы сделал фабрику фабрик
ну вообще кейс для фабрики фабрик мне пока трудно представить

Google
Alexey
12.03.2018
12:26:56
?
Вам надо стикеры разрешить, беседы веселее пойдут

Quantum Harmonizer
12.03.2018
12:27:14
Вам надо стикеры разрешить, беседы веселее пойдут
нет, они довольно большие, текст теряется

Alexey
12.03.2018
12:27:34
нет, они довольно большие, текст теряется
Вот мы чо то у себя в чатике не теряем текст

Даниил
12.03.2018
12:28:41
(x) => (y) => f(x,y)
а, ну да ок, будут фабрики фабрик

как будто что-то плохое

Руслан
12.03.2018
12:29:02
(x) => (y) => f(x,y)
фу, типичный код на реакте)

Alexey
12.03.2018
12:29:11
Щас бы функции высшего порядка обзывать фабриками фабрик ?

Даниил
12.03.2018
12:29:26
Mikhail
12.03.2018
12:29:30
Щас бы функции высшего порядка обзывать фабриками фабрик ?
не ну разве они не изоморфны друг другу?

Даниил
12.03.2018
12:30:46
надо короче просто на хаскеле писать, тогда не будет никаких "фабрик фабрик", "фабрик 5 порядка", будут просто каррированные функции :3

Mikhail
12.03.2018
12:31:53


Даниил
12.03.2018
12:32:27
Mikhail
12.03.2018
12:33:24
Эт какие такие? F#?

Igor
12.03.2018
12:35:02
??

Даниил
12.03.2018
12:35:20
F# мне не зашёл

всё из-за [file] order matters

Igor
12.03.2018
12:35:59
Тут я точно спорить не буду, го в оффтоп-чат (хотя мы это уже обсуждали)

Mikhail
12.03.2018
12:36:05


Google
Даниил
12.03.2018
12:36:32
Тут я точно спорить не буду, го в оффтоп-чат (хотя мы это уже обсуждали)
мне щас лень, ну кинь ссылку на офтоп чят, я может попозже наброшу)

Mikhail
12.03.2018
12:37:46
всё из-за [file] order matters
на бумаге концепция смотрится неплохо, не факт, что так сильно надо заставлять разрабов делить все на слои и избавляться от циклических зависимостей

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

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

Vladislav
12.03.2018
13:50:12
Вернусь к вопросу про SAM в котлине



Admin
ERROR: S client not available

Vladislav
12.03.2018
13:50:23
Оказывается он есть =O

Quantum Harmonizer
12.03.2018
13:50:32
для Java-интерфейсов

Vladislav
12.03.2018
13:50:47
Ога, мне как раз для них надо было

Не понятно вот это: Also note that this feature works only for Java interop; since Kotlin has proper function types, automatic conversion of functions into implementations of Kotlin interfaces is unnecessary and therefore unsupported. Почему нет необходимости для котлин интерфейсов и что взамен?

Pavlo
12.03.2018
13:53:10
лямбда

Vladislav
12.03.2018
13:54:57
typealias... наконец до меня дошло

Maxim
12.03.2018
16:56:18
Sergey
12.03.2018
19:49:08
In pure Kotlin projects, the recommended directory structure is to follow the package structure with the common root package omitted (e.g. if all the code in the project is in the "org.example.kotlin" package and its subpackages, files with the "org.example.kotlin" package should be placed directly under the source root, and files in "org.example.kotlin.foo.bar" should be in the "foo/bar" subdirectory of the source root). я так понимаю до сих пор нельзя так делать, чтобы идея такое поддерживала?

Sergey
12.03.2018
20:17:33
печально

Жабра
12.03.2018
20:43:44
Я так и не особо понял, чем здесь bg так уж отличается от async?

Google
Жабра
12.03.2018
20:43:45


Sergey
12.03.2018
20:50:03
тем что контекст сразу задан

вдруг ты что-то блокирующее там пустишь

inline fun <T> bg(crossinline block: () -> T): Deferred<T> = async(POOL) { block() }

internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), "bg")

Жабра
12.03.2018
20:57:23
вдруг ты что-то блокирующее там пустишь
Так, думал, что разобрался, но щас понял что не до конца. В чём будет принципиальная разница если мы запустим async вместо bg?

Он ведь так же проработает и дождется, нет?

Sergey
12.03.2018
21:11:10
у async дефолтный контекст будет DefaultDispatcher

Жабра
12.03.2018
21:11:15
Да

Sergey
12.03.2018
21:11:58
но я не знаю какой DefaultDispatcher на андроиде

на jvm возьмет ForkJoinPool

Mikhail
12.03.2018
22:40:07
а у котлин-комьюнити есть свой модный json-парсер?

Sergey
12.03.2018
23:05:33
jackson, gson :)

https://github.com/Kotlin/kotlinx.serialization но модный вот

Mikhail
12.03.2018
23:09:32
я тут бенчмаркаю json-парсеры жавовские, вот думаю, что-нибудь модное из котлина добавить

https://github.com/wizzardo/json-benchmarks

Sergey
12.03.2018
23:11:27
о, тогда будем рады бенчмарку kotlinx.serialization :)

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