
Andrew
02.08.2018
11:09:01
C try.kotl.in убрали шаринг по ссылке, что ли?
А, отбой.
https://try.kotlinlang.org/#/UserProjects/1dl67qhgavh26em6bvnu6lac59/2ba1fcgl3fhgci65nppqi4ej39

Dmytro
02.08.2018
11:15:16

Костя
02.08.2018
11:15:47

Google

The
02.08.2018
11:16:27

Quantum Harmonizer
02.08.2018
11:18:13

Andrew
02.08.2018
11:18:21
А точно планировалось написать filtered = filtered.filter {...}?

The
02.08.2018
11:18:51

Andrew
02.08.2018
11:19:11
Присваиваешь или копируешь?

Quantum Harmonizer
02.08.2018
11:19:22
Ох уж эти переменные. Вобщем, прямая дорога в юнит-тесты.

The
02.08.2018
11:19:25

Quantum Harmonizer
02.08.2018
11:19:31

Andrew
02.08.2018
11:19:41
Не должно быть, точно.
это потомучто filtered не изменяет object, ну ты в курсе наверн
В курсе.
Я ссылку тебе с работающим упрощённым аналогом скинул -- всё-таки фильтр работает, как и должен. Проблема где-то снаружи кода, который ты показал. Шансов, что чатик угадает, что ты там снаружи сделал не так, небольшие. Так что таки надо отладчиком бегать.
А, ну ещё одна маленькая мысль -- ты говоришь, что "или" работает не так. Тебе нужны "все с тройкой и / или со статусом isAList", "все либо с тройкой, либо со статусом isAList" или ещё что-нибудь другое?

The
02.08.2018
11:26:09

Google

Andrew
02.08.2018
11:26:52

The
02.08.2018
11:27:23

Andrew
02.08.2018
11:28:42
"как минимум одно из условий выполняется: группа 3, статус isAList". Верно?

The
02.08.2018
11:28:54

Andrew
02.08.2018
11:30:03
Я сдаюсь, я вроде достаточно прямо вопрос поставил несколько раз разными словами.
Удачи в отладке ?

The
02.08.2018
11:30:29

Denis
03.08.2018
01:28:29
Доброе утро
подскажите, как в котлине из Single<List<Car>> получить List<Car>? Что-то не могу понять с синтаксисом

Alexander
03.08.2018
01:42:13

Denis
03.08.2018
01:43:49

Dmitry
03.08.2018
06:33:57
Подскажите, я хочу проверить поле на null, и выполнить действие, если оно null. Прикреплю так, как пробовал - не выходит. Компилятор говорит, что поле всё ещё может быть null.
val email = if (email.value != null) this.email.value else {
reportError(emailError, "Поле не может быть пустым")
return
}

Axrorxo'ja
03.08.2018
06:33:57
добрый день есть такой вещь типа CompositeDisposable но для kotlin coroutines Jobs

Ilya
03.08.2018
06:35:58

Alexander
03.08.2018
06:36:42
вообще вот так надо: val email = email?.value ?: reportError(emailError, "Поле не может быть пустым") но в reportError ошибка должна выкидываться, иначе работать не будет

Dmitry
03.08.2018
06:37:46
String

Slava
03.08.2018
06:38:02
val localEmail = email
if(localEmail == null)
{
do it
}

Alexander
03.08.2018
06:38:09
Во второй ветке if-а не строка возвращается

Google

Aleksandr
03.08.2018
06:38:10
можно return туда положить
?: return reportError

Alexander
03.08.2018
06:38:19
а, стоп
Вы его самому себе что ли присваиваете?
return в выражениях просто так ставить вообще нельзя

Slava
03.08.2018
06:39:57
как вы код форматируете?
в телеге

Nikolay
03.08.2018
06:40:39

Dmitry
03.08.2018
06:40:46
нет, там должно присваиваться this.email, по идее. Исправлю, чтобы было понятнее:
val localEmail = if (email.value != null) this.email.value else {
reportError(emailError, "Поле не может быть пустым")
return
}

Alexander
03.08.2018
06:40:52
backquote как в маркдауне, но оно бывает глючит

Axrorxo'ja
03.08.2018
06:42:03

Alexander
03.08.2018
06:42:48

Axrorxo'ja
03.08.2018
06:43:59
большой спасибо, понял

Alexander
03.08.2018
06:44:35
родительсткий job - довольно удобная вещь. Можно делать иерархию и отрубать все сразу в случае экстренного останова (если родитель делает cancel, то все дети тоже отменяются)

Axrorxo'ja
03.08.2018
06:45:52

Alexander
03.08.2018
06:50:11
Кстати, сейчас залез и посмотрел, если явно не указан контекст, то он тоже наследуется от парента. Довольно удобно, его можно указать один раз

Dmitry
03.08.2018
06:59:01

Alexander
03.08.2018
07:00:58
Нут значит в вашем репорте не выкидывается исключение или не всегда выкидывается. Смысл в том, что у localEmail должен быть какой-то определенный тип, и в случае, если то, что вы хотите null, оно должно или как-то обрабатывать это или выкидывать исключение. Там можно возвращать пустую строку например, если это по логике годится

Bogdan
03.08.2018
07:02:24

Google

Dmitry
03.08.2018
07:11:17
Нут значит в вашем репорте не выкидывается исключение или не всегда выкидывается. Смысл в том, что у localEmail должен быть какой-то определенный тип, и в случае, если то, что вы хотите null, оно должно или как-то обрабатывать это или выкидывать исключение. Там можно возвращать пустую строку например, если это по логике годится
функция предельно простая... Вот, как по идее должно происходить присваивание:
val localEmail = email.value ?: reportError(emailError, "Поле не может быть пустым")
А вот функция:
private fun reportError(field: MutableLiveData<String>, message: String) {
field.value = message
throw NullPointerException()
}
Но именно в таком варианте компиллятор не пропускает и говорит, что localEmail должен быть типа String, но на самом деле он Any


Alexander
03.08.2018
07:12:43
Это то, о чем я говорю, компилятор не знает, что reportError всегда выкидывает ошибку. Это будет вылечено контрактами, когда они появятся, но пока не работает. Кстати, я думаю, что если вы поставите модификатор inline перед своей функцией, то все будет работать

Bogdan
03.08.2018
07:13:30

Alexander
03.08.2018
07:14:23
Сейчас у него мозг сломается.

Bogdan
03.08.2018
07:14:46

Dmitry
03.08.2018
07:15:37
Спасибо, я понял :)
В моем случае будет работать, если функция будет возвращать Nothing

Admin
ERROR: S client not available

Axrorxo'ja
03.08.2018
07:15:40

Andrew
03.08.2018
07:16:50
it.result?.let { result -> ... }

Alexander
03.08.2018
07:17:03
Нет, это фича. Он var, поэтому может такое случиться, что кто-то его испортил между двумя строками

Axrorxo'ja
03.08.2018
07:18:44

Dmitry
03.08.2018
07:18:59
Другой вопрос, почему функции по дефолту не возвращают Nothing, a Unit? В чем их разница?

Bogdan
03.08.2018
07:20:12

Alexander
03.08.2018
07:20:27
Unit - это синглетон объект, которые эквивалентен java void. Nothing - это значит что что-то возвращается, но это что-то является подтипом чего угодно
Вот я еще не до конца это понимаю

Bogdan
03.08.2018
07:21:02

Alexander
03.08.2018
07:21:27
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-nothing.html

Andrew
03.08.2018
07:21:42
Не совсем. Nothing в качестве возвращаемого типа функции значит, что функция гарантированно закончит выполнение броском исключения, то есть не вернёт ничего обычным способом.

Alexander
03.08.2018
07:21:46
В принципе да. Кстати, спасибо, я сам наконец примерно понял, что с чем его едят

Google

Alexander
03.08.2018
07:22:10
Мне на форуме теоретики мозги замутили, я запутался

Dmitry
03.08.2018
07:22:10
И я понял. Спасибо :)

Igor
03.08.2018
07:22:19

Andrew
03.08.2018
07:22:29
Точно.

Alexander
03.08.2018
07:22:42
Ну это то же самое, бесконечный цикл прерывается только по исключению

Andrew
03.08.2018
07:22:57
Ну или смертью VM ?

Alexander
03.08.2018
07:23:17
В каком-то смысле это тоже исключение :)

Dmitry
03.08.2018
07:23:31
Для ясности, если я в своей функции уберу выброс исключения, то компилятор это не пропустит:
private fun reportError(field: MutableLiveData<String>, message: String) : Nothing {
field.value = message
throw NullPointerException()
}

Igor
03.08.2018
07:23:34

Alexander
03.08.2018
07:23:56
Заачеем?
Того, что написано в документации достаточно без всякой теории категорий

Igor
03.08.2018
07:25:59

Alexander
03.08.2018
07:26:16
Я понял
Но не понял, зачем тут теория категори

Igor
03.08.2018
07:27:08
Ну ты понимаешь, зачем нужен Unit, а почему не юзать void везде?

Ivan
03.08.2018
07:29:04

Dmitry
03.08.2018
07:29:10

Alexander
03.08.2018
07:29:10
Я физик, а не математик, мне ближе какие-то реальные сущности. Я понимаю Unit и Nothing как некоторый вариант контрактов. Unit подразумевает, что функция что-то вернет, но это что-то никогда не будет использовано, а Nothing - функция никогда ничего не вернет