@kotlin_lang

Страница 960 из 982
Egor
19.10.2018
12:11:56
Экстеншены это вообще благодать, это добавление функционала классу без вторжения в сам класс

Мультиресиверы просто продолжают эту концепцию

Алексей
19.10.2018
12:13:00
кстати, а как вызывать экстеншн-функцию класса ?

Beholder
19.10.2018
12:13:15
ты под сервер разрабатываешь?
по работе сервер java, котлин хобби (swing)

Google
Алексей
19.10.2018
12:13:27
Quantum Harmonizer
19.10.2018
12:13:53
по работе сервер java, котлин хобби (swing)
вот в свинге же есть, как в FX, специфичные для контейнеров параметры вьюх?

Boris
19.10.2018
12:15:22
такие мультирессиверные функции мне очень хотелось когда я с графикой работал, вообще могла бы быть очень приятная фича, при этом с первого взгляда кажется, что ничего особого не требующая для релизации, ну может разве что придумать внятный синтаксис для него

Egor
19.10.2018
12:17:00
Насчет синтаксиса вроде даже обсуждение в ютраке есть двухгодичной давности

Quantum Harmonizer
19.10.2018
12:19:35
не видел этого тикета
https://youtrack.jetbrains.com/issue/KT-10468

Egor
19.10.2018
12:19:50
https://youtrack.jetbrains.com/issue/KT-10468
Вот, спасибо, только его нашёл

Quantum Harmonizer
19.10.2018
12:19:55
ну, насколько я понял, да
вот для задания этих параметров удобно неявным ресивером иметь контейнер, явным — вьюху

Beholder
19.10.2018
12:20:33
мне не про ресиверы интересно, а HKT

Egor
19.10.2018
12:21:46
конкретно в котлине тайпклассы - это своего рода расширение понятия контекстов, которые создаются засчет экстеншенов

По-крайней мере, в том виде, в котором они предлагаются

Beholder
19.10.2018
12:22:18
вот так всегда - попросишь рассказать, а в ответ теория и математика... :(

Google
Egor
19.10.2018
12:22:50
meh

Beholder
19.10.2018
12:23:10
как оно практические задачи может облегчить? что-нибудь тупо бухгалтерское. или типо gui

Boris
19.10.2018
12:23:34


Egor
19.10.2018
12:24:12
Тайпклассы - это просто фича, которая улучшает код

Так, ладно, окей

Igor
19.10.2018
12:26:52
как оно практические задачи может облегчить? что-нибудь тупо бухгалтерское. или типо gui
(hkt) Сможешь фри-монады использовать и делать бизнес логику без DI и сайд-эффектов ?

Beholder
19.10.2018
12:28:38
мне хочется верить, что это чудесная вещь, но виднеется везде что-то сферическое в вакууме

Igor
19.10.2018
12:31:28
Ну такое, с костылями не нужно (там даже доки на них нет)

Beholder
19.10.2018
12:31:36
можно статеечку хоть на английском, но только без хаскела и монад

Egor
19.10.2018
12:32:27
https://arrow-kt.io/docs/patterns/error_handling/ Не фри, но монады

Igor
19.10.2018
12:32:36
можно статеечку хоть на английском, но только без хаскела и монад
Хм, могу только предложить: https://www.infoq.com/presentations/io-functional-side-effects http://blog.ploeh.dk/2017/08/07/f-free-monad-recipe/ https://youtu.be/U0lK0hnbc4U (Why the free Monad isn't free)

Egor
19.10.2018
12:32:39
и да, Arrow привет

Alexey
19.10.2018
12:33:32
можно статеечку хоть на английском, но только без хаскела и монад
Ну вот я показывал как например без костылей, на чистом фп написать код, который позволит держать контекст, в данном случае сессию базы данных https://gist.github.com/eld0727/79714d2d79a21785ddf02b7c7e63648d

Все сервисы тут тайп классы

Тайп классы в "ковычках" конечно

Igor
19.10.2018
12:34:34
кекус, сейчас бы везде Kind<,> и fix писать

Alexey
19.10.2018
12:35:18
Ну без hkt сорян

Google
Egor
19.10.2018
12:36:13
Alexey
19.10.2018
12:36:18
Beholder
19.10.2018
12:36:26
в идеале хотелось бы как - вот программирет какой-нибудь Вася бухглатерию и формочки, хоть веб, хоть gui, и чувствует, что заколебался. и тут прилетает волшебный пони и говорит - Вася, тебе позарез нужны HKT и твой код станет в три раза короче и понятнее

Руслан
19.10.2018
12:36:51
Quantum Harmonizer
19.10.2018
12:37:42
Mikhail
19.10.2018
12:48:57
https://youtrack.jetbrains.com/issue/KT-10468
надо воскресить и довести до keep

Bogdan
19.10.2018
12:51:06
Ну вообще-то вместо срача можно придумывать новые идеи/концнпции, обсуждать возможность их реализации. Также вместо того что бы просто "тырить", предлагать модернизированные варианты "подсмотреного" у других, а не тупо тащить все из других яп

Bogdan
19.10.2018
12:51:56
Вот тема про дополнительный ресивер интересна, и ее нужно продвигать

Mikhail
19.10.2018
12:52:25
окей, раз уж пятничка, го

какие есть юзкейсы помимо UI?

надо набросать

Quantum Harmonizer
19.10.2018
12:53:29
какие есть юзкейсы помимо UI?
https://github.com/Miha-x64/reactive-properties/blob/master/sql/src/main/kotlin/net/aquadc/properties/sql/schema.kt#L165

Quantum Harmonizer
19.10.2018
12:54:49
^ поменял ссылку

https://github.com/Miha-x64/reactive-properties/blob/master/logic-sample/src/main/kotlin/net/aquadc/propertiesSampleLogic/sql/schema.kt#L38

Bogdan
19.10.2018
12:55:37
для этого надо быть нехило прокачанным в области теории ЯП
По спорам, мне кажется, у людей такое мнения о себе, они крутые спецы по разработке яп

Sergey
19.10.2018
12:55:51
на build.gradle.kts все же перекатился и от большой колбасы путей sql/src/main/kotlin/net/aquadc/properties/sql/schema.kt избавился на одном проекте?

Quantum Harmonizer
19.10.2018
12:56:21
А что исчезает? src? main? kotlin?

Google
Sergey
19.10.2018
12:56:49
sql/src/properties/sql/schema.kt остается

Mikhail
19.10.2018
12:56:56
https://github.com/Miha-x64/reactive-properties/blob/master/sql/src/main/kotlin/net/aquadc/properties/sql/schema.kt#L165
ащащащ вот это я понимаю полиморфное программирование

Konstantine
19.10.2018
12:59:38
Мы встроим дженерик в твой дженерик, чтобы ты мог использовать дженерик со своим дженериком.

Mikhail
19.10.2018
13:00:50
так, может это еще для каких-нибудь вложенных корутин подойдет?

Quantum Harmonizer
19.10.2018
13:03:20
Igor
19.10.2018
13:32:25
Кто-нибудь видел статейки/рецепты/подходы про то, как написать "кастомную стейт-машину, для интерпретации корутин"? Ну те можно залезть в сорцы SequnceBuilder с его yield, но может кто-то уже разложил такой подход по полочкам.

Dmitry
19.10.2018
13:53:58
Новый вариант ставить пробелы и прочие настройки оформления по какому запросу гуглить? Забыл, как это называется

Mikhail
19.10.2018
13:55:10
новый вариант ставить проблеы?

codestyle?

Dmitry
19.10.2018
13:56:30
Чтобы reformat code автоматически расставляло пробелы в 2 раза меньше. Это кодстайл называется?

ЖБ новый вариант настроек предложили, но я не могу найти описание этого события

Sergey
19.10.2018
13:58:00
официальный)

https://kotlinlang.org/docs/reference/coding-conventions.html

Mikhail
19.10.2018
13:59:17
он про автоформатирование

Sergey
19.10.2018
13:59:34
это оно и есть

Dmitry
19.10.2018
14:02:05
Ага спасибо. Видимо новый формат от старого не особо то отличается.

Andrey
19.10.2018
14:38:12
вот так всегда - попросишь рассказать, а в ответ теория и математика... :(
В простейшем виде typeclass - это такой интерфейс, реализацию которого ты можешь описать где угодно, а не только в определении класса. Пример на псевдоязыке: typeclass Hello<T> { // тайпкласс val hello: String } ... instance Hello<String> { // реализация для String. Описана отдельно от описания класса String override val hello: String get() = "Hello $this" } ... fun T greet(hi: Hello<T>) = println(hi.hello) // функция определённая для произвольной реализации тайпкласса ... greet("foo") // выведет "Hello foo" HKT или роды типов - описания структуры конструктора дженерик типа (сколько тайп параметров у дженерика, какой род у каждого тайп параметра) Пример для тайпкласса Functor: typeclass Functor<F<A>> { // F - дженерик (род * -> *), параметризуемый одним простым типом (род *) fun <B> map(f: (A) -> B): F<B> // если в языке есть роды типов, то возможны сигнатуры типа, где тайп параметр F параметризован другим тайп параметром } ... instance Functor<List<A>> { // теперь List является функтором и его можно использовать как аргумент любой функции, принимающей функтор override fun <B> map(f: (A) -> B): List<B> {...} }

То есть HKT нужны, чтобы более точные ограничения на дженерики описывать (map возвращает не просто какой-то F, а F<B>)

Alexander
19.10.2018
14:50:12
Абстракцию над данными, причем круче, чем интерфейсы
Пропустил, пока ребенка выгуливал. Вложенные контексты по моим ощущениям заменяют тайп-классы более изящным образом, и при этом добавляют некоторые идейно новые вещи, которые пока даже сложно оценить. Простой пример - это вынесение поведения в контекст. Если сейчас мы для определения различных поведений наследуем класс, в тайп классах, добавляем ему трейт, то в контекстно-ориентированном варианте, мы создаем новый контекст и запускаем нашу логику в этом новом контексте.

Andrey
19.10.2018
14:52:09
Используется примерно для таких задач: Есть у меня последовательность map вызовов, и хочу я, чтобы она работала для List, Sequence, Array и прочего, на что можно мэпиться. При этом без HKT придётся держать по одной реализации этой последовательности map для всех перечисленных вариантов. С HKT можно обойтись одной реализацией для функтора, которая будет работать для всего, что является функтором.

Google
Andrey
19.10.2018
14:54:42
Чего-то я не уверен
Ну в Haskell монад трансформеры как раз для вложенных контекстов разных монад используются

Alexander
19.10.2018
14:55:02
Одно другому не мешает. Тайпклассы конкретно в Котлине - это создание stateless контекста "на месте"
Я не спорю с идее тайп класса, но в пресловутом KEEP-87 там еще в добавок к тайп классам как-то много страшного мусора

Andrey
19.10.2018
14:55:16
Boris
19.10.2018
14:55:44
Не понимаю, как мультикониекст может заменить тайпклассы

Andrey
19.10.2018
14:55:54
Не понимаю, как мультикониекст может заменить тайпклассы
Никак. На тайп классах можно сделать вложенные контексты. На вложенных контекстах тайп классы не получится.

Alexander
19.10.2018
14:57:59
Они по разному работают, но результата примерно одинаковый

Andrey
19.10.2018
14:58:03
Тайп классы - более мощная абстракция, чем абстрагирование контекста.

Alexander
19.10.2018
14:58:12
Под контексты надо исходно код по-другому писать

Andrey
19.10.2018
14:58:31
Alexander
19.10.2018
14:59:37
Я думаю, что это развитие в разные стороны. Не понятно, что лучше. Тайп классы довольно хорошо исследованы, а что можно наворотить на хорошей контекстной логике пока до конца не понятно. При чем тут чисто инженерно надо смотреть, никакая математика не поможет.

Bogdan
19.10.2018
15:01:37
https://www.youtube.com/watch?v=v3dr4e54TLA

кто смотрит ?

или в оффтоп ?

Egor
19.10.2018
15:02:13
Ну, не то чтобы экстеншены собирались стрелять в ногу

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