@kotlin_lang

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

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

Михаил
04.07.2017
21:52:29
Что-то такое хотите? fun Job.onException(f: (Throwable) -> Unit) = invokeOnCompletion { if (it != null) f(it) }
что-то в таком духе. на андроиде мне лично сложно представляется один глобальный хендлер ошибок (ни разу не видел такого подохода). а обвешивать код try-catch тоже не хочется)

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 из первого

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
я почитаю про это, а вообще спасибо)
и даже если не помечать класс object (есть кейсы когда не получается его заюзать), то в коде выше две лишние ленивые инициализации

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 использовать

Руслан
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

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

Просто я бы не называл это прямо функциональным программированием)

Igor
05.07.2017
14:25:53
Просто я бы не называл это прямо функциональным программированием)
Кстати, а что такое “фп на котлин”, надеюсь ты не про либу funKTionale (код с ней выглядит просто ужасно)?

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

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

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

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

whalemare
05.07.2017
15:12:12
Вообще тернарный не жалко
А мне вот грустно без него, привык, удобно. Почему не жалко?

Руслан
05.07.2017
15:13:32
А мне вот грустно без него, привык, удобно. Почему не жалко?
Пишу и не чувствую в нем никакой потребности, всегда можно написать без него красивее. Начал позовлять себе писать if без {скобочек}

whalemare
05.07.2017
15:14:29
Пишу и не чувствую в нем никакой потребности, всегда можно написать без него красивее. Начал позовлять себе писать if без {скобочек}
Но иф без скоьочек это же чревато ошибками возможными не? Насчёт написать красивее, вполне возможно. Не думал как красиво обыграть без if else

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

Руслан
05.07.2017
15:15:51
Но иф без скоьочек это же чревато ошибками возможными не? Насчёт написать красивее, вполне возможно. Не думал как красиво обыграть без if else
Ну это однострочники, как раз там где был бы тернарный. По ощущениям я пользовался тернарным там, где сейчас элвис делает жизнь проще

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
Создаем петицию, просим вернуть тернарник ?

Создаём движения по возврату тернарного оператора, выдвигаем лидеров в защиту

Artem
05.07.2017
15:30:18
Хахаха

Опрос вконтакте

Неанон

? animufag ?
05.07.2017
15:30:50
на change.org
о, ну я бы даже репостнул такое

Igor
05.07.2017
15:31:01
Ну по чесноку, как частно тренарник появляется в среднем интерпрайзном коде, раз на 1k LoC?

В Scala кстати тоже нет тренарного оператор и всем ОК (потому что экспрешен if).

? animufag ?
05.07.2017
15:32:10
Ну по чесноку, как частно тренарник появляется в среднем интерпрайзном коде, раз на 1k LoC?
это вкусовщина. в андроиде вот привели пример выше и это реально жиза была, но обойтись без этого легко

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
Кстати, веселуха с пайпами https://i.gyazo.com/b84eff833796d54b1e2225699d14179d.png P.S. ᕈ можно без кавычек
я когда пишу такое с let меня не покидает ощущение что я что-то делаю не так)

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

Artem
05.07.2017
21:26:58
Тогда для чего вообще оно нужно?

если я и так могу в UI потоке всё выполнять. Поясните, пожалуйста)

Boris
05.07.2017
21:28:16
А какие suspend-функции внутри вызываются?

Я имею ввиду в блоке async

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