@kotlin_lang

Страница 890 из 982
Alexander
25.09.2018
17:49:49
Ну каждому свое.

Quantum Harmonizer
25.09.2018
17:49:59
Есть джист? Мне кажется, что вариант дженерик в дженерике должен работать, но может я чего-то не знаю
Вот пример, где объявлено несколько таблиц/структур. Там внутри каждого поля есть Converter<T>, то есть мы знаем тип, с которым он работает, но не интерфейсы, которые он реализует. https://github.com/Miha-x64/reactive-properties/blob/master/logic-sample/src/main/kotlin/net/aquadc/propertiesSampleLogic/sql/schema.kt

Alexander
25.09.2018
17:53:21
Я таки настроил kotlinx-serialization в мультиплатформе. В конце концов таки взял новую градл модель и с ней все заработало через час. Но все равно уперся в том, что sealed классы не работают,

Google
Alexander
25.09.2018
17:59:38
Он не работает в common

Andrey
25.09.2018
18:00:04
Sealed-классы не совсем подходят, потому что я хочу обрабатывать 100500 исключений исключительно внизу try, в одном месте
Так а почему sealed классы не подходят? Делаете sealed class MyError, от которого наследуете все ваши варианты checked исключений. Потом, с помощью Either<MyError, *> монады из arrow конструируете ваш control flow pipeline, в конце которого в mapLeft или getOrHandle обрабатываете возможные исключения, возникающие при выполнении pipeline. Вот вам и практически полный аналог проверяемых исключений, который моделируется системой типов.

Oleg
25.09.2018
18:00:23
у него есть кажется реализация на JVM точно, + кажется на js, не уверен на счёт native-a

Alexander
25.09.2018
18:01:56
Да, JVM и JS есть, но нет в common

Andrey
25.09.2018
18:03:01
Проверяемые исключения - тот ещё костыль в Java. Одна из проблем с ними - они плохо совместимы с анонимными функциями и вообще с ФП и ООП (с анонимными классами они тоже плохо совместимы, если что).

Alexander
25.09.2018
18:08:26
Что и случилось, вот я и искал путь, как можно этого избежать. Теперь вижу, что никак. Спасибо большое за ответ

Andrey
25.09.2018
18:08:55
В языке просто нет такого понятия, соответственно и нет возможности синтаксически это анализировать.

Dibro
25.09.2018
18:14:00
Жабра
25.09.2018
18:30:46
Щас начал обновлять koin с дорелизной на релизную, всё понятно кроме одного: 'releaseContext(String): Unit' is deprecated. Please use Scope API. Как реализовать, не подскажите?

Artem
25.09.2018
18:51:39
А нормально ли для ограничения доступа к методам билдера внутри билдера делать компаньон? Например у меня есть билдер у диалога, но после определенного метода я хочу чтобы ничего кроме show() вызвать нельзя было. Поэтому я сделал LocalBuilder только с методом show() и operator fun invoke(originalBuilder). Так можно вообще? Может ещё какие-то варианты есть для ограничения доступа?

Quantum Harmonizer
25.09.2018
18:54:18
Ненормально делать билдеры.

Google
Boris
25.09.2018
18:55:07
Не так чтобы ненормально, но можно сделать и дсл

Quantum Harmonizer
25.09.2018
18:55:32
Тоже отстой.

Boris
25.09.2018
18:55:41
Это правда не избавит от необходимости делать контекстные классы

Тоже отстой.
Ну да, лучше сделать класс с тыщей полей в дефолтном клнструкторе

Artem
25.09.2018
18:56:37
Ненормально делать билдеры.
ну мне нужен враппер над алертдиалогом прост. А там билдер)

И мне проще унаследоваться от него.

Так ладно, что насчет моего варианта?

Boris
25.09.2018
18:57:25
Норм вариант

Quantum Harmonizer
25.09.2018
18:57:55
ну мне нужен враппер над алертдиалогом прост. А там билдер)
Ну ты же тогда получаешь изменяемый класс.

Boris
25.09.2018
18:58:03
Хотя из билдеров получаются лучшие дсл-ы ?

Quantum Harmonizer
25.09.2018
18:58:43
Есть «пошаговые билдеры», где каждый метод возвращает экземпляр нового класса. Ну и горы классов из одного метода. Вот там можно контролировать порядок.

Хотя из билдеров получаются лучшие дсл-ы ?
более того, DSL-ы — и есть билдеры

Artem
25.09.2018
18:59:00
Хотя из билдеров получаются лучшие дсл-ы ?
не до этого сейчас вообще) И одно от другого не отличается

Ненормально делать билдеры.
а что ты кстати можешь предложить?)

Quantum Harmonizer
25.09.2018
19:03:44
а что ты кстати можешь предложить?)
Конструктор или фабрику, которая создаёт объект за один вызов.

Artem
25.09.2018
19:06:54
Но в случае, когда много параметров-то...

Quantum Harmonizer
25.09.2018
19:08:19
ну и много параметров == плохой код

Artem
25.09.2018
19:09:05
Окей. С тем же алерт диалогом как быть, например. Мне надо много чего сгонфигурировать под себя

Google
Artem
25.09.2018
19:12:29
Ну, у меня кастомный диалог например, у которого много вариантов, как можно его сконфигурировать: заголовок, его положение, иконка, поле ввода, список, кнопки и т.д.

Quantum Harmonizer
25.09.2018
19:14:51
Ну, у меня кастомный диалог например, у которого много вариантов, как можно его сконфигурировать: заголовок, его положение, иконка, поле ввода, список, кнопки и т.д.
Иконка в заголовке? Можно завести класс TitleBar(icon: Drawable, text: CharSequence) Поле ввода, список, кнопки — это тело? Можно завести отдельный класс, описывающий тело. Но вообще, не вижу смысла это всё делать, когда есть именованные параметры.

Artem
25.09.2018
19:15:54
именованные параметры, а потом куча if’ов? А если надо с джавы это юзать?

Quantum Harmonizer
25.09.2018
19:19:14
AlertDialog я всё же не выставлял бы наружу.

Artem
25.09.2018
19:19:37
почему?

Quantum Harmonizer
25.09.2018
19:20:23
Зачем ифы? Если из джавы, тогда имеет смысл заморочиться с маленькими классами.

Artem
25.09.2018
19:21:16
Хотя да, насчет ифов может я чет не так надумал

Dmitriy
25.09.2018
19:58:55
есть кто пользуется корутинами в вертиксе? )

Алексей
25.09.2018
22:00:01
Есть actor конечно же
https://gist.github.com/InsanusMokrassar/0720b26e2df7584e1121ba9df7aff7b9 Сделал на акторе:)

Спасибо за подсказку, @HeapyHop и @Enleur

Алексей
26.09.2018
05:38:29
А ещё вопрос - runBlocking, как я понял, не рекомендуется вызывать ниоткуда, кроме main. А что тогда вызывать в остальных случаях?

Алексей
26.09.2018
05:44:15
мне это и нужно

мне нужно, чтобы поток заблокировался до конца работы блока, но я боюсь, что вне main это как-то вызывает проблемы, потому что любое засыпание внутри может (как я понял) перевести корутину, созданную runBlocking на другой поток

Алексей
26.09.2018
05:46:21
Для чего тогда корутины?)
Большая часть проекта на них и я по-тихоньку перевожу на них весь проект, но есть методы, которые работают без suspend, но вызывают методы, завершения которых они должны дожидаться

Google
Жабра
26.09.2018
05:48:48
Тогда нужно блокировать поток, что такое себе, поэтому всё же лучше suspend либо не дожидаться результата.
Ну либо делать типо fun foo(): Deferred<Bar> = async { suspendFun() } И передавать результат в обёртке

Admin
ERROR: S client not available

Алексей
26.09.2018
05:49:27
Ну либо делать типо fun foo(): Deferred<Bar> = async { suspendFun() } И передавать результат в обёртке
Если бы у меня была возможность сменить сигнатуру - я бы так и сделал:)

Алексей
26.09.2018
05:50:06
В блокирующем коде runBlocking вполне норм
у меня почему-то всё подвисает

причём та часть, что написана через корутины в итоге полностью работает, в отличие от блокируючей части

Vladimir
26.09.2018
05:51:14
у меня почему-то всё подвисает
Трудно угадать почему, но видимо внутри runBlocking что-то не завершает свою работу

Например?
Например что?

Алексей
26.09.2018
05:51:27
А в чем трабл?
в том, что потом будут проблемы совместимости с другими модулями, в которых этот проект как зависимость используется

Vladimir
26.09.2018
05:52:49
Например что там нормального?
Ну как-то жили же раньше с блокирующим IO и тредпулами. От того, что блокирующий вызов заменяется на корутины в runBlocking, хуже ничего не станет. Нельзя взять и выкинуть весь синхронный код в проекте разом.

Жабра
26.09.2018
05:54:23
Ну как-то жили же раньше с блокирующим IO и тредпулами. От того, что блокирующий вызов заменяется на корутины в runBlocking, хуже ничего не станет. Нельзя взять и выкинуть весь синхронный код в проекте разом.
Раньше и без электричества нормально себя чувствовали. А про выкинуть синхронный код - не про это разговор, я имел ввиду что лучше свести блокировку к минимуму, либо использовать её в мейне, либо дождаться suspend main

Алексей
26.09.2018
05:55:00
Оторожно, трэш и угар Есть такой PR: https://github.com/InsanusMokrassar/AutoPostTelegramBot/pull/9 В нём вопрос касается двух файлов: https://github.com/InsanusMokrassar/AutoPostTelegramBot/pull/9/files#diff-b50c01624191e4c3468ab0822484defb И https://github.com/InsanusMokrassar/AutoPostTelegramBot/pull/9/files#diff-c35464483a8aaed1fa1e593d4f280dd7 Старая система работала без семафора, но определённые нюансы уже давно толкали меня его добавить. Код до этого PR вполне себе работает.

Vladimir
26.09.2018
05:56:49
Раньше и без электричества нормально себя чувствовали. А про выкинуть синхронный код - не про это разговор, я имел ввиду что лучше свести блокировку к минимуму, либо использовать её в мейне, либо дождаться suspend main
Это да, но в идеальном мире, где уже всё хорошо. Я про то, что в проекте с синхронным кодом использование runBlocking - это норма, а иногда неизбежность.

Google
Руслан
26.09.2018
07:30:40
Maven больше не нужен, теперь можно git репы прямо в gradle фигачить https://blog.gradle.org/introducing-source-dependencies

Igor
26.09.2018
07:32:59
Здравствуй GO (-way) ?

Vladimir
26.09.2018
07:34:49
Maven больше не нужен, теперь можно git репы прямо в gradle фигачить https://blog.gradle.org/introducing-source-dependencies
Ну это больше для C++ и другой нативщины А мавен как система сборки и раньше был не нужен

Алексей
26.09.2018
07:40:31
Vladimir
26.09.2018
07:43:19
Написано что работает и с Kotlin
Ну я себе не представляю use case'ов для такой штуки в мире JVM. Разве что для MPP и K/N. Но вообще интересная фича.

Sergey
26.09.2018
07:54:22
А это отличная новость
на самом деле так себе

кто-то сделает форс-пуш или удалит репу и фсё )

хотя iOS-еры как-то же живут с этим )

S
26.09.2018
07:56:05
Jitpack же и с мавеном, и грейдлом работает

Руслан
26.09.2018
07:56:45

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