
Sergey
15.03.2018
13:54:30

Alexey
15.03.2018
13:55:04
За Pair и Triple точно надо стрелять

Sergey
15.03.2018
13:55:16
чем не туплы?)

Quantum Harmonizer
15.03.2018
13:55:24

Google

Vladislav
15.03.2018
13:55:38
точно точно
http://pedrorijo.com/blog/tuples-are-evil/

Kamo
15.03.2018
13:57:05
Просто есть вещи, которые каждый наследник обязательно должен сделать после создания. Я хочу возложить вызов этих методов на базовый конструктор, чтобы не забывать в детях

Sergey
15.03.2018
13:57:55
не надо наследование
делай композицию

Quantum Harmonizer
15.03.2018
13:58:05

Alexey
15.03.2018
14:00:00

Alexandr
15.03.2018
14:00:08
http://pedrorijo.com/blog/tuples-are-evil/
Интересно, там в цикле статей есть аналогичная, посвященная лямбдам?
Да и в принципе любому другому синтаксическому сахару. С теми же аргументами: если много использовать, код станет непонятным
Все эти разговорчики про "надо руки отрывать/стрелять за использование хххх" - лишь от комплексов.

Kamo
15.03.2018
14:01:58
Я уже начал задумываться, что это оверинжениринг, но всё же..
Есть базовый класс BaseView, наследующийся от Android.View. Все наследники этой BaseView должны заинфлейтить себя и заполнить контентом. По сути 2 метода - inflate(), fillData().
Теоретически можно написать в базовом классе
init { inflate(); fillData() }
но это вызовется раньше, чем завершится дочерний конструктор, что в перспективе плохо.

Alexey
15.03.2018
14:02:12

Quantum Harmonizer
15.03.2018
14:03:05

Kamo
15.03.2018
14:03:40
их вызов всё равно ляжет на плечи каждого ребенка

Google

Sergey
15.03.2018
14:04:44

Quantum Harmonizer
15.03.2018
14:04:57

Kamo
15.03.2018
14:05:40

Тимур
15.03.2018
15:07:51
вопрос про корутины
в очередной раз написал примерно такой код:
val deffereds = ArrayList<Deferred<Int»()
for (i in list) {
deffereds.add(async {
callSuspendFunction(i)
})
}
val results = ArrayList<Int?)
deffereds.map { it.await() }.toCollection(results)
А есть ли какая-то готовая функция, которая такое делает? Какой-то fork join для корутин, чтобы распараллелить вызовы и собрать результаты?

Sergey
15.03.2018
15:10:32

Roman
15.03.2018
15:10:34
val deffereds = list.map { async { callSuspendFunction(i) } }
Embrace functional programming, FTW!

Sergey
15.03.2018
15:11:15
тогда уже:
val results = list.map { async { callSuspendFunction(i) } }.map { it.await() }

Alexey
15.03.2018
15:11:16
Надо вам сделать тикет на Deferred.traverse

Sergey
15.03.2018
15:12:03
уже есть такие)

Alexey
15.03.2018
15:12:12
Не одно и тоже

Тимур
15.03.2018
15:12:20

Roman
15.03.2018
15:12:50
Есть такой запрос: https://github.com/Kotlin/kotlinx.coroutines/issues/172

Тимур
15.03.2018
15:13:20
ок, будем ждать )

Roman
15.03.2018
15:13:20
чтобы писать что-то вроде list.map(parallelism = n) { callSuspendFunction(i) }

Тимур
15.03.2018
15:15:31
хочется что-то похожее на parallelStream

Sergey
15.03.2018
15:17:04
а вот кстати если мы хотим выполнить что-то параллельно нагрузив CPU, мы можем гарантировать что у нас корутины распределяться равномерно по тредпулу?
а то если их планировщик закинет на один тред, то будет как-то не очень

Тимур
15.03.2018
15:19:56
по идее об этом должен пул позаботиться
это как с пулом потоков - мы туда таски закидываем, а как он там их распараллелит - это уже его дело и зависит от конкретного пула

Google

Albert
15.03.2018
15:30:06
Господа, кто на котлиновском митапе в мск?

Mikhail
15.03.2018
15:38:15

Sergey
15.03.2018
15:54:29

Mikhail
15.03.2018
15:56:29

Dmirty
15.03.2018
16:15:07

Sergey
15.03.2018
16:16:26
1 downTo 100
https://kotlinlang.org/docs/reference/ranges.html

Dmirty
15.03.2018
16:17:10
тьфу, понял, спасибо ))

Руслан
15.03.2018
16:37:01

Sergey
15.03.2018
16:39:33
минск?

Марат
15.03.2018
16:44:22
Если инициализировать топ-левел val через lazy это будет лениво?

Alexey
15.03.2018
16:45:11

Igor
15.03.2018
16:45:40
минск?
Если Руслан, то зразу Белоруссия что ли ?

Марат
15.03.2018
16:45:53

Sergey
15.03.2018
16:46:03
а ну да, он же в Мск должен был выступать еще

Alina
15.03.2018
16:46:14
минск?
Москва, митап в Leroy Merlin. Тут о нем писали раньше

Руслан
15.03.2018
16:57:55
Людей много
А сообщества нету, только в ВК 11 человек

Oleg
15.03.2018
17:00:42
Трансляция есть?

Google

Vitalii
15.03.2018
17:06:16
https://www.youtube.com/watch?v=Cxhh943T_o4&feature=youtu.be

Oleg
15.03.2018
17:06:17
https://www.youtube.com/watch?v=Cxhh943T_o4
нашёл, вдруг кому надо

Admin
ERROR: S client not available

Oleg
15.03.2018
17:06:20
лол

Igor
15.03.2018
17:07:24
А в СПб сейчас едет
https://www.meetup.com/St-Petersburg-CPP-User-Group/events/247816721/
Рассказывают про котлин native (трансляции нет, но будет видео)

Oleg
15.03.2018
17:15:28
https://www.youtube.com/watch?v=2ZT5eQpQwH4
Вот здесь ещё выступление сейчас (там на канале и выступление Руслана есть сегодняшнее)

Тимур
15.03.2018
17:52:41
чтобы писать что-то вроде list.map(parallelism = n) { callSuspendFunction(i) }
Немного повозившись изготовил такой велосипед:
suspend fun <T> forkJoin(outerBlock: (fork: (suspend () -> T) -> Unit) -> Unit): List<T> {
val deferreds = ArrayList<Deferred<T>>()
outerBlock({ deferreds.add(async { it() }) })
return deferreds.map { it.await() }
}
Пример использования:
val results = forkJoin<Int> { fork ->
for (i in 0..10) {
if (i % 2 == 0)
continue
fork { callSuspendFunction(i) }
}
}
Что мне самому в нем нравится - это что нет никакого ограничения на внешний блок кода, который формирует вызовы fork
Не требуется чтобы исходные данные приходили именно из стрима или именно листа.
Хочешь циклы, хочешь if-ы, все что угодно.

Yuri
15.03.2018
18:13:43

Ivan
15.03.2018
18:42:01
Руслан @HeapyHop и Роман @relizarov , спасибо большое за выступление, было интересно!

Artem
15.03.2018
18:49:29

Oleg
15.03.2018
18:50:58
пару сообщений выше есть ссылки

Ivan
15.03.2018
18:53:04

Artem
15.03.2018
18:53:26
сорри, не видел. Спасибо!

Quantum Harmonizer
15.03.2018
18:55:21

Igor
15.03.2018
19:33:34
Господа, а разве google/flexbox написан на котлине?
Там же вроде только тесты и семплы.

Vitalii
15.03.2018
19:47:49

Руслан
15.03.2018
20:41:57
Но технически ты прав конечно

Sergey
15.03.2018
20:50:28
гугл не дурак)

Ivan
15.03.2018
20:58:49
а про что вот этот чат? https://t.me/kotlin_jvm

Google

Sergey
15.03.2018
20:59:05
про JVM)
там нет kotlin/js, kotlin/native и андроида

Dmirty
15.03.2018
21:15:07
А можно из идеи просмотреть сгенерированный котлином байткод? просмотр байткода для любого класса выдает "unable to find class to show bytecode"

Leonid
15.03.2018
21:15:31
экшн “show Kotlin bytecode"

Dmirty
15.03.2018
21:16:32

Ivan
15.03.2018
21:21:42

Sergey
15.03.2018
21:22:02
ну пока там тихо.. но это пока!)

Kirill
15.03.2018
21:22:55
Больше чатов богу чатов!


Виталий
16.03.2018
01:26:24
Всем привет!
Начал изучать котлин, возникло пару вопросов.
В котлине убрали явные исключения.
Как вы решаете проблему, когда метод помимо основного ответа может вернуть ошибку? При том нужно ли знать нюансы ошибки решает тот кто вызывает.
В свифте все просто - там есть ошибки на подобие исключений в джава, но только полностью явные. В джаве тоже исключения удобно использовать для того чтобы сообщить что ответа мы не дождемся, держи ошибку
Выходит нужно юзать enum или Pair чтобы можно было возвращать две вариации ответа.
Спасибо!
Исключения можно ловить конечно нет проблем, но объявление метода об этом не предупреждает - поэтому оч плохо так использовать, теперь исключения реально только в исключительных случаях использовать
И было бы неплохо узнать что дают пакеты в котлине, только ради совместимости с джавой?
Другой вариант вижу делать как в ObjC - передавать ссылку на переменную ошибки, куда будет записана ошибка если нужно ее читать, а в ответе функции просто отдавать нулевые данные, говорящие что произошла ошибка и данных нет. Как лучше и обычно поступают сейчас котлин разработчики?