
Руслан
04.07.2017
21:51:02
Ну и они пошли костылять поверх своих промисов :)

Alexander
04.07.2017
21:51:53
убил xD

Михаил
04.07.2017
21:52:29

Alexander
04.07.2017
21:54:48
посмотри в сторону абстракции, для определённых задач нормальная практика всё обернуть, тем более если это выполняется асинхронно

Google

Igor
04.07.2017
22:08:02

Eugene
04.07.2017
22:18:48
Ребята а подскажите по такому варинту использования - есть два синглетона, один хранит состояние а другой должен быть на это состояние подписан, это корректно?
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
class A private constructor() {
private val TAG: String = javaClass.simpleName
val state = Observable<State> = PublishSubject.create(){....}
init {
}
private object Holder {
val INSTANCE = A()
}
companion object {
val instance: A by lazy { Holder.INSTANCE }
}
}
ну и второй класс в init{} подписывается на observable из первого

Михаил
04.07.2017
22:29:53

Eugene
04.07.2017
22:30:14
почему странная?

Михаил
04.07.2017
22:31:09
зачем два обжекта для хранения ссылки на синглтон?
и почему не устраивает реализация синглтона которую предлагает котлин?

Eugene
04.07.2017
22:32:26
ну лэзи лоад

Михаил
04.07.2017
22:32:45
котлиновский синглтон итак лейзи

Eugene
04.07.2017
22:35:28
я почитаю про это, а вообще спасибо)

Михаил
04.07.2017
22:38:45
class Singleton private constructor() {
companion object InstanceHolder {
val instance = Singleton()
}
}
вот этого достаточно для лейзи лоада
или еще проще
object Singleton {
}

Google

Ivan
05.07.2017
10:33:20
парни привет, читаю доки, но никак не могу сообразить. Есть базовый абстрактный класс BasePresenter<View>, есть BaseFragment, у которого абстрактный метод getPresenter : BasePresenter<*> - проблема в том что в такой конструкции, я не могу в классе BaseFragment писать в presenter.view
в каждом фрагменте не очень хочеться писать presenter.view = this / presenter.view =null
как это можно грамотно разрулить?

whalemare
05.07.2017
11:26:35
Парни, кто из Нск на дроид парти сегодня топает?
Плюс там про Котлин Q&A будет, если что интересно задавайте тут я спрошу

kle
05.07.2017
11:32:22
НСК - это Носква?

Dmitry
05.07.2017
11:32:34
)
@whalemare 1. Вопрос: когда нет смысла использовать корутины? Когда есть смысл использовать ИМЕННО корутины котлина?

Denis
05.07.2017
11:38:52
1.1.3-2 сделали чтоль?

Михаил
05.07.2017
11:40:13
да. как раз ищу изменения

Руслан
05.07.2017
11:41:37
https://github.com/JetBrains/kotlin/releases/tag/v1.1.3-2

Roman
05.07.2017
11:53:56
@whalemare Прямо конкретно не ответить. Но если у вас много каких-то задач (запросов, агентов, акторов и т.п.) внутри приложения и большую часть они чего-то _ждут_, то корутины это самое то. Другой подход к ответу на этот вопрос — если вы собрались использовать callbacks или futures, то подумайте не проще ли это сделать через корутины.
@whalemare А вообще, в моей презентации по корутины я постарался достаточно подробно раскрыть вопрос "зачем" (когда использовать): https://www.youtube.com/watch?v=b4mBmi1QNF0

whalemare
05.07.2017
11:55:37
Очень грамотно все и последовательно изложено, приятно слушать, спасибо)

Roman
05.07.2017
12:01:01
Соотвественно, от корутин большой пользы нет, если никакого ожидания нет. Если вам нужно просто распраллелить что-то CPU-consuming, то проще просто какой-нибдь ForkJoinPool или parallel streams использовать

Artur
05.07.2017
12:06:36

Руслан
05.07.2017
13:35:40
Примерно то что мы в чатике меряли, только в виде поста на хабре: https://habrahabr.ru/company/inforion/blog/332460/

Igor
05.07.2017
13:49:11
Кто там говорил что корутины это про “императивное програмирование”.
Очень даже можно и функционально https://gist.github.com/anonymous/019761ad4f8371a287d16e9616ebc830

Михаил
05.07.2017
14:18:05
а чем это лучше completable future и зачем тут coroutines?

Google

Руслан
05.07.2017
14:19:33
Ну это чуть другое, это про то что коллекции в языке можно использовать с корутинами
Просто я бы не называл это прямо функциональным программированием)

Igor
05.07.2017
14:25:53

Руслан
05.07.2017
14:43:26

? animufag ?
05.07.2017
14:46:52

Igor
05.07.2017
15:04:31
Кстати, тут в C# насмотрелись на своих F# коллег и реально требуют затянуть оператор |> (“pipe”) в язык.
В Kotlin похоже делает метод let, который благодаря inline в принципе может заменить даже map/flatMap у RxJava
Как вам (хотелось бы аргументировано)? https://i.gyazo.com/bc175972da35156277bfc4003ddabfb6.png

Руслан
05.07.2017
15:07:39

Igor
05.07.2017
15:08:38
Именно он.
Вот честно в корутинах (в Kotlin и C#/TS) больше всего бесят “временные переменные”, которые как-то называть надо и тд.

whalemare
05.07.2017
15:11:18
Задал вопрос про тернарный оператор, почему выпилили, Дмитрий Жемеров ответил что однозначно сказать не могут. Прото решили что он не нужен. Но с помощью зала решили, что если хорошо попросить то в 1.2 может вернут))

Руслан
05.07.2017
15:11:46

whalemare
05.07.2017
15:11:47
Ну и там ещё кучу других. Скину сюда потом выжимку, хотя по идее видео должно быть

whalemare
05.07.2017
15:12:12

Руслан
05.07.2017
15:13:32

whalemare
05.07.2017
15:14:29

Igor
05.07.2017
15:14:41
Таки да, тренар не нужен, ведь Kotlin “expression oriented language” (в отличие от java/c#)

Руслан
05.07.2017
15:15:51

whalemare
05.07.2017
15:18:25

Ilya
05.07.2017
15:20:22
Напиши один раз ext fun с булевым параметром и всё

? animufag ?
05.07.2017
15:24:06
можно сделать 2 экстеншен функции
setVisibleOrGone(bool) и setVisibleOrHidden(bool)

Google

DarkMentat
05.07.2017
15:25:11
имхо тернарник нужон, то, что if и when выражение круто, но он полаконичнее был. Они не взаимозаменяемы, иногда один выглядит красивее, иногда другой.
ну и ?. и ?: есть, а тернарника нету)

? animufag ?
05.07.2017
15:26:14
тернарный убрали возможно из-за того что двоеточие слишком многозначние получается. читается он хорошо если только ситуация с тремя словами.
если развесистые экспрешены выходят то if экспрешен лучше читается

DarkMentat
05.07.2017
15:26:54
если что-то очень короткое - то тернарник лучше

Artem
05.07.2017
15:27:50
Присоеденяюсь к словам о том, что можно и заюзать в одну строку if-else без скобок. Делаю так же, где использовал бы тернарник
Та же запись, только на нескольуо символов больше получается

Admin
ERROR: S client not available

? animufag ?
05.07.2017
15:28:27
ну и можно сделать bool.ifTrue(e1, orElse: e2)
всё равно длиньше конечно и оба выражения вычаслятся)

Artem
05.07.2017
15:29:24
Создаем петицию, просим вернуть тернарник ?
Создаём движения по возврату тернарного оператора, выдвигаем лидеров в защиту

Михаил
05.07.2017
15:30:14

Artem
05.07.2017
15:30:18
Хахаха
Опрос вконтакте
Неанон

? animufag ?
05.07.2017
15:30:50

Igor
05.07.2017
15:31:01
Ну по чесноку, как частно тренарник появляется в среднем интерпрайзном коде, раз на 1k LoC?
В Scala кстати тоже нет тренарного оператор и всем ОК (потому что экспрешен if).

? animufag ?
05.07.2017
15:32:10

Igor
05.07.2017
15:33:47
Если это встречается 1 раз на весь проект, то пофиг (переживем). Если больше - то надо абстрагировать в ext fun/prop.

Google

? animufag ?
05.07.2017
15:40:19
кстати канадский алфавит же есть.
inline fun <T> Boolean.`ᕈ`(ifTrue: T, orElse: T) = if (this) { ifTrue } else { orElse }
наверное это не так работает(

Igor
05.07.2017
15:48:56
Кстати, веселуха с пайпами https://i.gyazo.com/b84eff833796d54b1e2225699d14179d.png
P.S. ᕈ можно без кавычек

? animufag ?
05.07.2017
15:53:47
data class PartialResult<T>(val condition: Boolean, val trueBranch: T)
infix inline fun <T> Boolean.`ᕈ`(ifTrue: T) = PartialResult(this, ifTrue)
infix inline fun <T> PartialResult<T>.`ᕋ`(elseBranch: T) = if (condition) trueBranch else elseBranch
да точно
true ᕈ 1 ᕋ 2
ну треугольник этот канадский точно нужно приспособить под пайпы
и обратный пайпы
и пайпы над опшионалом для функции не принимающей опшионал
и кнопки как-нибудь забиндить

Sergey
05.07.2017
19:15:24

Artem
05.07.2017
21:24:19
ребят, в корутинах async(UI) { } выполняет всё в ui потоке? чет не понимаю

Михаил
05.07.2017
21:26:27

Artem
05.07.2017
21:26:58
Тогда для чего вообще оно нужно?
если я и так могу в UI потоке всё выполнять.
Поясните, пожалуйста)

Boris
05.07.2017
21:28:16
А какие suspend-функции внутри вызываются?
Я имею ввиду в блоке async