@kotlin_lang

Страница 673 из 982
Artur
17.05.2018
09:08:56
registerInternal(action: String, consumer: (Context, T) -> Unit) routes[action] = consumer

Artur
17.05.2018
09:13:39
т.к это поля в классе, тогда нужно будет указать дженерик для класса?

Google
Artur
17.05.2018
09:16:13
https://pastebin.com/v9wFESSy

routes[action] = consumer тут мы не может скопировать, может как-то можно хитро каст сделать?

Quantum Harmonizer
17.05.2018
09:17:45
routes[action] = consumer тут мы не может скопировать, может как-то можно хитро каст сделать?
consumer принимает какой-то определённый подтип ScreenActionEvent, не любой

Artur
17.05.2018
09:18:11
ну так, там же указан T : ScreenActionEvent

Quantum Harmonizer
17.05.2018
09:18:56
ну так, там же указан T : ScreenActionEvent
ну это любой подтип ScreenActionEvent, у каждого отдельного consumer он может быть свой

Artur
17.05.2018
09:20:29
можно убрать дженерик с функций и сделать его глобальным на весь класс

но это мне что то не очень ноавится

или так кастануть, routes[action] = consumer as (Context, Any) -> Unit то тоже дико ((

Quantum Harmonizer
17.05.2018
09:22:38
или так кастануть, routes[action] = consumer as (Context, Any) -> Unit то тоже дико ((
кастануть можно только если ты уверен, что consumer'у будут переданы только допустимые action'ы, и готов взвалить эту проверку типов на себя

Artur
17.05.2018
09:23:47
а какие есть ещё выходы?

Quantum Harmonizer
17.05.2018
09:24:35
а какие есть ещё выходы?
Я задачу не особо знаю. Выглядит как DI-контейнер или роутер.

Artur
17.05.2018
09:26:01
это просто роутер, где мы регаем доступные переходы и потом можно делать следующее ScreenRouter.route(this, new CartClickActionEvent());

Quantum Harmonizer
17.05.2018
09:27:48
это просто роутер, где мы регаем доступные переходы и потом можно делать следующее ScreenRouter.route(this, new CartClickActionEvent());
можно вместе с consumer регистрировать тип event с помощью reified, а в роутере искать consumer для подходящих action и type, только вот с generic-типами понадобятся дополнитеьлные телодвижения

Google
Artur
17.05.2018
09:30:21
да уж (

ок, спасибо. буду думать

ЕВГЕНИЙ
17.05.2018
09:43:12
Всем привет ! Подскажите пожалуйста, у меня есть приватная переменная класса, я хочу через свойство поля создать публичный сестер, это возможно? private var a:ClassF? = null public set(value) { firld = value } тип такого

Идея иметь только сетер к переменной a

Quantum Harmonizer
17.05.2018
09:45:59
ЕВГЕНИЙ
17.05.2018
09:47:55
Quantum Harmonizer
17.05.2018
09:48:10
ЕВГЕНИЙ
17.05.2018
09:49:10
потому что свойства удобнее
То есть чтобы иметь приватный гетер и публичный сетер это нужно 2 дополнительные функции писать ? Ну как в яве

Gleb
17.05.2018
09:49:15
разве нельзя сделать паблик поле с приватным геттером?

ЕВГЕНИЙ
17.05.2018
09:50:15
почему же 2, если только одну?
Приватный самоинкапсулированный метод нет и сет внешнего интерфейса

вроде того
Понял.. спасибо огромное !

Gleb
17.05.2018
09:59:12
private var value: String = "value" get() { return field + " " } fun setValue(value: String) { this.value = value }

Alexander
17.05.2018
10:29:49
Эм. Тупой вопрос - разве нельзя просто написать: var value: String = "something" private get

Иван
17.05.2018
12:18:02
Есть способ проверить пачку переменных на null, да и так, чтобы ещё и тип вывелся правильно?

listOf().all { it != null } не выводит же тип

Жабра
17.05.2018
12:19:40
Google
Иван
17.05.2018
12:20:21
Ну то есть val x: Int? = getNullableInt() val y: String? = getNullableString() if (…) { val a: String = x val b: String = y }

Жабра
17.05.2018
12:22:27
Как раз это убрать хочется
Зачем переприсваивать переменные? val x: Int? = ... val y: String? = ... if (x != null && y != null) { x // Int y // String }

Иван
17.05.2018
12:22:53
Они группируются в data class

Внутри которого не nullable

Пример не полный

Жабра
17.05.2018
12:23:21
Ivan
17.05.2018
12:23:31
val x: Int = getNullableInt() ?: default/throw exception val y: String = getNullableString() ?: default/throw exception

Иван
17.05.2018
12:23:45
Ну как вариант

Но через исключения как-то криво

Ivan
17.05.2018
12:24:11
Если есть разумный дефолт, то лучше с ним, конечно

Andrew
17.05.2018
12:24:19
listOf().all { it != null } не выводит же тип
Конкретно для коллекций есть .filterNotNull(), который успешно меняет тип https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter-not-null.html

Жабра
17.05.2018
12:24:46
Пример не полный
Код в студию, пожалуйста.

Ivan
17.05.2018
12:25:14
getNullableInt()?.let { x -> getNullableString()?.let { y -> DataClass(x, y) } }

Еще вот так уродливо можно

Для любителей

Жабра
17.05.2018
12:26:10
val x: Int? = ... val y: String? = ... if (x != null && y != null) { DataClass(x, y) } В чем проблема?

Ivan
17.05.2018
12:26:37
Это джава получается, а не котлин

Жабра
17.05.2018
12:27:18
Это джава получается, а не котлин
А смысл уродовать вложенными let-ами и прочим? Просто потому что ЧТОБЫНЕКАКВДЖАВЕ?

Ivan
17.05.2018
12:28:03
Летами не нужно. Был бы for comprehension, как в скале, было бы удобно. А так лучше с ?: на мой взгляд.

Google
Иван
17.05.2018
12:28:07
data class SomeDataClass( val a: Int, val b: String, ... ) val x: Int? = getNullableInt() val y: String? = getNullableString() val ... val someDataClass? = when { <x, y и ещё N переменных != null> -> SomeDataClass(a = x, b = y) else -> null }

Похоже только через &&

Ладно

Иван
17.05.2018
12:29:57
Смущает, что нужно … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null && … != null

Ivan
17.05.2018
12:30:32
А зачем все nullable? Что предполагается дальше делать, если что-то из этого null?

Иван
17.05.2018
12:30:51
Вместо data class null записать в переменную

Ivan
17.05.2018
12:30:54
Возвращать null это изуродовать не только этот кусок, но и код, который будет его использовать

Иван
17.05.2018
12:31:06
То есть или все не null и тогда создать data class или ничего

Ivan
17.05.2018
12:32:37
И где этот data class используется предполагается, что он может отсутствовать, и это нормальная ситуация?

dimiii
17.05.2018
12:35:05
В чатике это похоже очень популярная тема, Елизаров уже давал идиоматичное решение: DataClass(x ?: return, y ?: return) Монаду прямо пощупать можно

Жабра
17.05.2018
12:47:25
Точно нельзя придумать решение, где не будет столько null?

Quantum Harmonizer
17.05.2018
12:48:05
Точно нельзя столько null'ов. :)

dimiii
17.05.2018
12:50:08
то есть? fun f(x: Int?, y: String?): SomeDataClass? = SomeDataClass(a = x?: return null, b = y ?: return null)
В такой форме: fun checked(x: Int?, y: String?): SomeDataClass? { return SomeDataClass(x ?: return null, y ?: return null) } У компилятора ограничения на использование return c functions with expression body

Иван
17.05.2018
12:53:59
Думайте как можно уменьшить количество null.
Их пока всего 4. Но интересно само решение

Жабра
17.05.2018
12:54:44
Их пока всего 4. Но интересно само решение
Точно нет варианта, чтобы исключить null?

Google
Иван
17.05.2018
12:55:57
Нет. Они из БД берутся. 4 параметра, которые нужно показывать в json только в случае, если все заполнены

Quantum Harmonizer
17.05.2018
12:56:36
Жабра
17.05.2018
12:56:46
Иван
17.05.2018
13:15:41
listOf.findFirst == null
Так не сработает вывод не nullable типа String? -> String!!

Aleksandr
17.05.2018
13:16:26
ну это да - никуда не денешься

Костя
17.05.2018
13:33:19
Не, тут надо создать именно переменную task как я показал и ее ждать. Каждый вызов ретрофит апи создает запрос.
а подскажи получается task : Deferred держит в себе объект загруженный от retrofit, мне надо её как-то чистить или сбрасывать вообще ? сейчас смотрю если cancel вызываю у неё , например после того как загрузил данные - отобразил данные - заканселил deferred, делаю поворот экрана, из deffered снова получаю данные, он их держит вообще всегда что ли ? не memory-leak ли это

Roman
17.05.2018
13:37:37
Да, сбросить его состояние нельзя. Если там тяжелый объект и он тебе не нужен больше, то занули.

Костя
17.05.2018
13:38:27
понял, спасибо

а что cancel может ?

это чтобы оборвать например загрузку ?

а если загружено уже, то бесполезно

Roman
17.05.2018
13:39:13
Точно.

Виталий
17.05.2018
13:43:17
Привет, подскажите как сделать так ? private var colorMap = IntArray(ROWS, { IntArray(COLUMNS, { 0 }) }) двумерный интовый массив нулей

Quantum Harmonizer
17.05.2018
13:44:46
Привет, подскажите как сделать так ? private var colorMap = IntArray(ROWS, { IntArray(COLUMNS, { 0 }) }) двумерный интовый массив нулей
Внешний массив — не массив интов, а массив массивов интов (объектов). Array(ROWS, { ... })

Виталий
17.05.2018
13:45:37
Quantum Harmonizer
17.05.2018
13:46:12
((( а че так, что бы оба интовые были ни как ?
Массив интов может содержать только инты. Он не может содержать массив интов, т. к. массив интов — не инт.

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