@kotlin_lang

Страница 821 из 982
Konstantin
22.08.2018
13:51:02
як всё сложно
у некоторых тяга к усложнению )

Alexey
22.08.2018
13:51:26
Bogdan
22.08.2018
13:51:59
Alexey
22.08.2018
13:52:35
мне вродь не понадобились)))0
Для чего либу писал?

Google
Quantum Harmonizer
22.08.2018
13:55:15
Для чего либу писал?
— для запуска сервисов в ведроиде — для реактивщины — для обкладывания костылями андроид-фреймворка — для круд-админки на сайте — коллекции — авторизация в андроид-приложении через ВК — для Gson, чтобы он не игнорил конструкторы — для валидации ввода в андроиде мб чо забыл

Alexey
22.08.2018
13:55:59
А ну это всё конкретика без абстракций)

Mikhail
22.08.2018
13:57:00
мне вродь не понадобились)))0
у тебя вместо flatMap mapWith вроде

со странной сигнатурой

Quantum Harmonizer
22.08.2018
13:57:13
у тебя вместо flatMap mapWith вроде
потому что это не flatMap)

его у меня просто нет, хотя несложно сделать и планируется

Mikhail
22.08.2018
13:57:34
ну как не flatMap?

а

стоп

это zipWith

Quantum Harmonizer
22.08.2018
13:58:29
ну как не flatMap?
flatMap при каждом изменении this подписывается на обзёрвабл, возвращённый функцией

а тут у меня нет функции)

это zipWith
стоит переименовать?

Google
Mikhail
22.08.2018
13:59:14
я бы переименовал, все-таки zip устоявшаяся штука, даже в RxJava

Mikhail
22.08.2018
14:00:53
kotlin.collections

java.Stream

и т.д.

Quantum Harmonizer
22.08.2018
14:01:20
понял, спасибо

Bogdan
22.08.2018
14:10:35
я бы переименовал, все-таки zip устоявшаяся штука, даже в RxJava
А что вообще zip значит, можно на пальцах, примерах пояснить ?

Quantum Harmonizer
22.08.2018
14:11:31
А что вообще zip значит, можно на пальцах, примерах пояснить ?
объединить две штуки в одну, типа apple.zipWith(pen): Pair<Apple, Pen>

Alexey
22.08.2018
14:19:08
Ну вообще сигнатура примерно такая fun <A, B> List<A>.zip(other: List<B>): List<Pair<A, B>>

Mikhail
22.08.2018
14:19:11
объединить две штуки в одну, типа apple.zipWith(pen): Pair<Apple, Pen>
Кстати, вот тут такая штука, что zip обычно обьединяет попарно, т.е. zip([1,2,3], [а,b]) вернет [(1,а), (2,b)] А у тебя судя по коду, mapWith возвращает [(1,а),(2,b),(3,b)]

Alexey
22.08.2018
14:19:23
Вместо лист любой тип с параметром

Mikhail
22.08.2018
14:24:30
у меня не лист) да, это похоже на combineLatest
Ну лист, растянутый во времени, какая разница

Quantum Harmonizer
22.08.2018
14:25:11
Ну лист, растянутый во времени, какая разница
Вот это и есть решающая разница. Приходит пара значений на текущий момент, а не пара значений с одинаковыми индексами. Последнее бессмысленно.

Quantum Harmonizer
22.08.2018
14:29:02
Все равно значения дискретные
Вот, допустим, синтетический пример. val left = propertyOf(0) val right = propertyOf(0) val stereo = left.mapWith(right, ::Pair) stereo.addChangeListener { _, _, (l, r) -> audioDevice.setSamples(l, r) } launch { left.value = nextSample(leftFile) delay(1.0 / leftFile.sampleRate) // 44 100 Hz } launch { right.value = nextSample(rightFile) delay(1.0 / rightFile.sampleRate) // 48 000 Hz }

Alexey
22.08.2018
14:30:07
Ну это по сути zipWithMap

А вот это left.mapWith(right, ::Pair) - это вообще просто zip, так как zipWithMap(a, b, ::Pair) == zip(a, b)

И вот если бы у тебя были систематические знания то обозвал бы всё это как заведено :)

Google
Alexey
22.08.2018
14:35:11
Можно поботать теор кат

Меня спасли либы вроде cats и arrow, по ним изучил все эти законы

Теор катом универ обделил

Mikhail
22.08.2018
14:39:00
Я бы с радостью. А где их взять?
попиши чутка на Typed FP языке или arrow

Alexey
22.08.2018
14:51:50
ну почему ж нет. Их же можно эмулировать
Кстати а как это вообще выглядеть в коде будет Например как на arraow записать что то подобное? def twice[F: Functor](value: F[Int]): F[Int] = Functor[F].map(value, _ * 2)

Mikhail
22.08.2018
15:10:45
там функтор имеет такой интрефейс interface Functor<F> { fun <A, B> Kind<F, A>.map(f: (A) -> B): Kind<F, B> } а значит вроде как fun twice(value: Functor<F>) : Kind<F, Int> = value.map { it * 2} должно сработать

но я тот еще луркер, на arrow не писал, только смотрел документашку/семплы/презы

ещще не чувствую, что накопил критическую массу теории чтобы понимать, что делать с этим

Alexey
22.08.2018
15:17:22
А во есть дока https://arrow-kt.io/docs/patterns/polymorphic_programs/

Хреново конечно, что надо использовать всякие OptionOf

Mikhail
22.08.2018
15:21:12
ну да, и кодогенерация - та еще штука

Alexey
22.08.2018
15:23:04
ну да, и кодогенерация - та еще штука
Ну это только если ты не хочешь инстансы руками писать

Alexey
22.08.2018
15:28:49
Либа которая тянет с собой arrow. Сильно
Ну и нечего, у нас в скале авторы либ решили завязаться на cats

И все живы

Konstantine
22.08.2018
15:29:09
Если она локальная - то может и нормально.

Bogdan
22.08.2018
15:30:17
Ну и нечего, у нас в скале авторы либ решили завязаться на cats
только не говорите что вы пишете под андроид

Nameless
22.08.2018
15:30:45
Когда ты пишешь библиотеки разных сортов, тебе нужны абстрации, и вот всякие arrow позволяют говорить что твои абстрации подчинаются каким то законам
а есть какие-нибудь опенсорс примеры с использованием таких подходов и что бы это выглядело более менее оправдано (опционально)?

Google
Nameless
22.08.2018
15:35:56
инетресно на котлине

Alexey
22.08.2018
15:37:18
только не говорите что вы пишете под андроид
Ну андроид на скале сложновато

Mikhail
22.08.2018
15:37:32
инетресно на котлине
https://arrow-kt.io/docs/quickstart/projects/ тут вроде что-то есть

Va
22.08.2018
15:39:21
Ребят, есть инфа, когда SAM для котлиновых интерфейсов завезут ?

Quantum Harmonizer
22.08.2018
15:40:42
Ребят, есть инфа, когда SAM для котлиновых интерфейсов завезут ?
в 1.3, то есть в снэпшотах уже, наверное, есть

Mikhail
22.08.2018
15:41:20
Ребят, есть инфа, когда SAM для котлиновых интерфейсов завезут ?
а вот кстати, скажите, зачем такое, если есть typeAlias? обратный интероп с джавой?

Alexander
22.08.2018
15:41:47
Почитал я эту дискуссию и полез все-таки смаотреть, что такое Type классы (первые три раза я отразился от терминологии). Поковоярял, поковырял и обнаружил, что я их оказывается давно использую в kmath для определения математических операций.

Quantum Harmonizer
22.08.2018
15:41:58
а вот кстати, скажите, зачем такое, если есть typeAlias? обратный интероп с джавой?
в функциональных типах не решена проблема боксинга, например

Admin
ERROR: S client not available

Alexander
22.08.2018
15:42:04
По крайней мере в том виде, в котором они сейчас есть в arrow

Vladimir
22.08.2018
15:43:28
Alexander
22.08.2018
15:43:55
этот

Quantum Harmonizer
22.08.2018
15:44:03
Немного холиварная тема. Я вот хочу и всё
нет, правда, зачем? Вот кто-то и статик до сих пор хочет

Alexander
22.08.2018
15:44:26
Там операции над полями и пространствами опрделены таким образом

Alexander
22.08.2018
15:44:51
Хто?

Mikhail
22.08.2018
15:45:05
этот
Ога, один в один считай

Alexander
22.08.2018
15:45:07
Я физик если что, я от переизбытка математических терминов сам взрываюсь

Просто Keep по тайп классам написан так, что вообще ничего понять невозможно

Google
Vladimir
22.08.2018
15:45:38
нет, правда, зачем? Вот кто-то и статик до сих пор хочет
Документация, осмысленное название метода и аргументов например

Andrew
22.08.2018
15:46:12
Я физик если что, я от переизбытка математических терминов сам взрываюсь
N методов на X сущностей в случае с унарными операциями, N*X*Y -- с бинарными и т.д.

Alexander
22.08.2018
15:47:18
Не понял. Это вроде проблема с шаблонами. Если шаблонов нет, то и проблемы нет. Мы всегда оперируем очень ограниченным количеством типов

Mikhail
22.08.2018
15:47:46
не очень понятно, какой понт вводить ключевые слова в двух точках, если все то же самое легко делается хитрым dsl (это я про KEEP-87)

Alexander
22.08.2018
15:48:42
Мне сильно нехватает возможности вводить расширения с двумя ресиверами. В смысле чтобы определять контекстное расширение не внутри класса а как расширение. Если бы это было, все остальное вообще не нужно

Alexander
22.08.2018
15:52:12
Это палка о двух концах. Когда я математикас большим количеством теоретических знаний начинаю объяснять банальные вещи типа систем сборки, они подвисают насмерть

Alexander
22.08.2018
15:54:42
Это просто расширение которое видно только когда ресивером является определенный объект.

Quantum Harmonizer
22.08.2018
15:54:44
Alexander
22.08.2018
15:54:55
Quantum Harmonizer
22.08.2018
15:55:11
это только в DSLах всякких нужно, на пределе языковых возможностей)

Alexander
22.08.2018
15:55:15
Очень мощная штука

Quantum Harmonizer
22.08.2018
15:55:22
вот в Anko есть member extension functions

Alexander
22.08.2018
15:56:25
это только в DSLах всякких нужно, на пределе языковых возможностей)
Не согласен, вот во всяких обобщенных математических операциях очень полезно. В DSL конечно тоже, но ими все не ограничивается.

Вообще, суть в том, что оно уже есть. Просто синтаксиса для него нет

А как в Anko это сделано если язык не позволяет?

Mikhail
22.08.2018
15:57:09
На самом деле можно такое сделать через class XDecorator(x: X) определяющий экстеншены

Alexander
22.08.2018
15:57:38
Да, я сейчас примерно так и делаю

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