@kotlin_lang

Страница 547 из 982
Даниил
16.02.2018
17:32:44
На кой если полиморфизм и так есть из коробки
вопрос в гибкости интерфейсы намного меньше гибкости дают чем тайпклассы

Quantum Harmonizer
16.02.2018
17:33:36
https://gist.github.com/MihailovJava/15de8dc193c63d6c57b8b7f71b340f78
где код функции do() от одного аргумента?

Nikita
16.02.2018
17:34:36
опечатка, там от двух вызывается

где код функции do() от одного аргумента?
суть вопроса именно в том что итерфейс у класса А должен быть через родителя класс В, но котлин ругается

Google
Nikita
16.02.2018
17:38:21
а если вынести все кроме do в Java, тут в этом еще загвоздка

Даниил
16.02.2018
17:38:29
вопрос в гибкости интерфейсы намного меньше гибкости дают чем тайпклассы
проблемы интерфейсов: 1) нельзя добавить реализацию к существующему классу 2) нельзя типизировать статические функции обе проблемы решаются если интерфейсы будут описывать не инстансы класса, а реализацию определённого поведения как отдельную сущность, это в принципе можно делать и сейчас но из-за отсутствия поддержки языком приводит к другим ограничениям

Quantum Harmonizer
16.02.2018
17:39:22
Nikita
16.02.2018
17:40:02
логично, что должно работать, ладно, буду у себя искать что не так, спасибо

Quantum Harmonizer
16.02.2018
17:40:38
логично, что должно работать, ладно, буду у себя искать что не так, спасибо
Ну, у меня не «должно», у меня именно работает) Java: class A extends B {} class B implements C, D, E {} interface C {} interface D {} interface E {}

Nikita
16.02.2018
17:42:37
все, тоже заработало, проблема в одинаковых именах интерфейсов, и не правильно автоимпорт проставил зависимость

спасибо за помощь!

Mikhail
16.02.2018
17:46:12
Дык у нас всего 1.5 языка с автокаррированием) В скалке зато частичное применение есть
При особом желании можно наделать расширений invoke() для функций и котлиновские функции начнут себя вести как каррированные

Или нет

Kirill
16.02.2018
18:12:00
Не получится

Там ambiguity будет

Mikhail
16.02.2018
18:12:21
А, точняк, родные методы приоритетнее екстеншнов

Google
Grigory
16.02.2018
18:33:44
чаго?
унаги

Mikhail
16.02.2018
18:35:43
Нууу, мне сложно каждый раз заново велосипедить по мелочи. RxJava почти такая же по сложности концепция - и ничего, захватила android разработку полностью

Igor
16.02.2018
18:36:14
Вот интересно, почему против НКТ, звучит прикольно
Для “продвинутых” будет отдельный компилятор от разработчиков arrow ?

Vitalii
16.02.2018
18:36:55
Вот интересно, почему против НКТ, звучит прикольно
Ну наверное чтобы не перегружать язык всем подряд и не делать вторую скалу.

Mikhail
16.02.2018
18:37:41
Для “продвинутых” будет отдельный компилятор от разработчиков arrow ?
Это не скоро будет. JB говорили, что апи компилятора очень нестабильно

Mikhail
16.02.2018
18:43:29
Я слышал от Елизарова

Руслан
16.02.2018
18:43:33
https://github.com/arrow-kt/kotlin

Я слышал от Елизарова
Да не в этом дело, они просто форкнули котлин чтобы сделать POC для того самого KEEP.

Mikhail
16.02.2018
18:44:46
Ну одно дело сделать POC, другое - прикрутить плагин к компилятору

Руслан
16.02.2018
18:44:59
Так а кто про плагин говорил?

Mikhail
16.02.2018
18:45:23
А, невнимательно прочел)

Ну, отдельный замороженный во времени форк компилятора ради тайпклассов - такое себе)

Руслан
16.02.2018
18:45:49
Но судя по форку пока в самом JB не захотят, ничего не будет. Потому что в форке один коммит и очень давно.

Mikhail
16.02.2018
18:46:14
Не, там вроде движ в слэке и гиттере есть

Но я особо не вникал, времени маловато форкать котлин?

Andrew
16.02.2018
18:46:44
Обсуждать -- не мешки ворочать :D

Google
Mikhail
16.02.2018
18:46:57
Ну тык)

Кстати, есть здесь кто по корутинам для dsl может помочь?

Руслан
16.02.2018
18:48:01
Проще сразу задать вопрос, чем ждать пока кто-то признается

Mikhail
16.02.2018
18:48:30
Я просто набросил, пока gist готовлю

Mikhail
16.02.2018
19:18:44
Проще сразу задать вопрос, чем ждать пока кто-то признается
Короче, пытался я сделать с помощью Applicative builder такую штуку, чтобы можно было простым dsl делать функцию-конструктор, которая бы возвращала валидный обьект, если все необходимые параметры переданы, либо null, если чего-то не хватает, оно вроде с помощью chain call легко вышло (я даже нашел похожий проект на гитхабе под названием Forge, это json парсер с апи в таком стиле), но захотел не этого олдскульного fluentapi, а крутого классного dsl, чтобы красиво было, но чего-то не выходит у меня круто и красиво https://gist.github.com/Mishkun/313d00ed21a28c1b590008f8eebd1892

если нужен полный компилящийся код - могу и его закинуть, но там много постороннего

Andrew
16.02.2018
19:27:48
Кто там хотел Arrow поосваивать? До 21-го числа курсец бесплатный есть: https://caster.io/courses/functional-programming-in-kotlin-with-arrow

Andrew
16.02.2018
19:30:40
Странно, у меня первое видео открылось.

Mikhail
16.02.2018
19:31:10
все, норм, чет Ябраузер подводит

picty
16.02.2018
19:32:57
Подскажите пожалуйста - не нужно ли в Kotlin unbind'ить вьюхи - как в ButterKnife например?

Mikhail
16.02.2018
19:33:45
Andrew
16.02.2018
19:39:04
https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc?hl=en-US откуда б я ещё узнал о таком замечательном расширении, если б не из курса по функциональщине в котлине.

Artem
16.02.2018
19:40:28
Ребят, а в каком пакете находится suspendCoroutineOrReturn?

Mikhail
16.02.2018
19:42:27
Artem
16.02.2018
19:43:20
kotlin.coroutines.experimental.intrinsics.*
Сори. Немного не так выразился. Какую либу надо именно подключить? Потому что в core не вижу такого.

Mikhail
16.02.2018
19:44:02
в том то и дело, что я хз как оно импортится

Google
Mikhail
16.02.2018
19:44:19
я воспользовался импортом на копировании из InteliJ

и скопировал внутренности SequenceBuilder

и оно добавило этот пакет

Artem
16.02.2018
19:45:20
Эт как? Можно чуть подробнее пожалуйста?) Просто копировали путь и прописали в import?

Mikhail
16.02.2018
19:45:31
агась

Artem
16.02.2018
19:45:54
Просто прописал вручную импорт и всё хорошо :D Вопрос закрыт, спасибо)

Руслан
16.02.2018
19:46:55
Я кстати такое-же примерно писал for fun недавно, https://gist.github.com/IRus/68f2e811592b9dd3b18dabe68116c964 Сейчас придумал как из этого сделать DI который при этом будет хорошо работать с Java 9 модулями.

Mikhail
16.02.2018
19:54:35
Я кстати такое-же примерно писал for fun недавно, https://gist.github.com/IRus/68f2e811592b9dd3b18dabe68116c964 Сейчас придумал как из этого сделать DI который при этом будет хорошо работать с Java 9 модулями.
ну каррирование я по-другому сделал, тут фокус в том, чтобы если в required поле попал null, результатом всего выражения был null. Это делается с помощью Applicative. В нотации Haskell получится data Foo a b Maybe c constructor :: Maybe a -> Maybe b -> Maybe c -> Maybe Foo constructor x y z = Foo <$> x <*> y <*> (Just z)

Короче, вопрос пока снят, сходил в слак arrow, меня там ткнули в реализацию Applicative Builder у них, завтра буду курить

Quantum Harmonizer
16.02.2018
20:52:03
@android_ru, @kotlin_mobile. В любом случае, надо код.

Mikhail
16.02.2018
20:56:41
Тут точно надо код

Andrew
16.02.2018
21:38:28
Ключевое там было вот это: "@android_ru, @kotlin_mobile."

Quantum Harmonizer
16.02.2018
21:39:58
А где десяток RelativeLayout, о которых говорилось вначале?

Ну, надо проверить, разные ли у них ID.

Igor
17.02.2018
08:01:43
А как идиоматично “сложить” элемент с (readonly)списком? T + List<T> Что бы получился список с новым хедером. Оператор “plus” работает только при сложение справа же. Как вариант конечно можно listOf(x) + xs

Mikhail
17.02.2018
08:14:14
А вот так получится? operator fun <T> T.plus(list: List<T>) = listOf(this) + list

Но вообще надо просто ждать пока нормальные неизменяемые коллекции завезут

Boris
17.02.2018
08:20:59
А вот так получится? operator fun <T> T.plus(list: List<T>) = listOf(this) + list
Такого не сделали, чтобы не засорять пространство методов для любого типа, я так думаю

Google
Mikhail
17.02.2018
08:29:10
И как это поможет?
Тогда не надо будет оборачивать новую баушку в синглтон и копировать хвост

Igor
17.02.2018
08:35:53
Если не жалко, просто обернись новый хедер в синглтонлист
А там оно так и происходит fun <T> listOf(element: T): List<T> = java.util.Collections.singletonList(element)

Но вообще надо просто ждать пока нормальные неизменяемые коллекции завезут
Думаю можно уже юзать то что есть, все равно на их развитие давно забили. Использовал в одном проекте - работали, я правда особо не исследовал как оно на память влияет (коллекции все равно были маленькие).

Boris
17.02.2018
08:39:57
Тогда не надо будет оборачивать новую баушку в синглтон и копировать хвост
Это не поможет, все равно оператор складывающий элемент со списком не сделают

Mikhail
17.02.2018
08:42:27
Это не поможет, все равно оператор складывающий элемент со списком не сделают
Ну можно сделать какой нибудь бллее-менее эффективный .prepend()

Igor
17.02.2018
09:42:48
а как можно покрасивее написать следующий код (первый map из rx, остальное – котлиновские функции) map { platforms -> platforms.filterNot { fetched -> existing.any { (id) -> id == fetched.id } } }

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