@kotlin_lang

Страница 514 из 982
Igor
29.01.2018
14:14:29
А чем сейчас не устраивает?
Там сейчас не либа, а парочка методов, которые к тому же уже пол года не обновляли.

Yury
29.01.2018
14:14:46
это просто коллбеки, которые компилятор преобразует в код который похож на "синхронный", устраняя колбекхел)

Там сейчас не либа, а парочка методов, которые к тому же уже пол года не обновляли.
А что там обновлять? Я так понимаю, что остальное это задача других либ- оборачивать асинхронные io в вызовы к бд и тд.

или не правильно понимаю?)

Google
Artem
29.01.2018
14:19:09
это просто коллбеки, которые компилятор преобразует в код который похож на "синхронный", устраняя колбекхел)
звучит круто. а надо заморачиватся в использовании каких-то специальных асинхронных библиотек в этом случае, чтобы они возвращали управление в случае io?

Igor
29.01.2018
14:21:46
А что там обновлять? Я так понимаю, что остальное это задача других либ- оборачивать асинхронные io в вызовы к бд и тд.
Текущие состояние kotlinx-nio это низкоуровневые обертки над AsyncChannel. А они (я так понял) хотят навернуть абстракцию, что бы вообще не думать о NIO.

Igor
29.01.2018
14:23:51
Про это я не слышал. Наверное проще написать обертки под разрабатываемый Oracl

Alexandr
29.01.2018
15:11:06
Есть у кого-нибудь пример котлин + даггер 2, включая библиотеку даггер андроид?

Интересуют отличия в реализации

Alexandr
29.01.2018
15:13:02
полно в интернете
Да что-то все не работает, переезжаю с явы, и проблемы появились

Quantum Harmonizer
29.01.2018
15:13:26
Alexandr
29.01.2018
15:14:07
Sergey
29.01.2018
15:32:28
оно даст счастье или есть что лучше?
spring boot с webflux возьми поверх netty)

Andrew
29.01.2018
15:34:37
https://github.com/JetBrains/kotlin/commits/rr/zarechenskiy2 А тем временем в Kotlin везут inline classes (правда, пока с единственным свойством, то бишь работать это будет только как typedef на стероидах).

Google
Igor
29.01.2018
15:43:49
А пропозал где?

Igor
29.01.2018
15:44:07
Это веб-сервер. Мне понравился.
akka-http мне зашел больше всего из альтернатив. DSL божественный

Andrew
29.01.2018
15:48:48
Интересно. Можно будет запилить какие-нибудь PositiveInt, NonNegativeInt, например.
Я больше жду Uint и компанию -- как раз общаюсь сейчас с автором kotlin-unsigned на предмет multi-platform, который, очевидно, скоро в Kotlin/Native завезут.

Kirill
29.01.2018
15:49:48
насколько я помню, в первую очередь это ускорит корутины

Andrew
29.01.2018
15:51:24
А примеры их, или для чего они
typealias MyInt = Int определяет новое имя для того же типа. inline class MyInt(val v: Int) определяет новый тип, на котором можно определить свои операторы, методы и не иметь неявного приведения типов.

class MyInt(val v: Int) тоже определяет новый тип, но этот явный бокс живёт в рантайме, в отличине от inline class, где в рантайме не будет объекта-враппера

Quantum Harmonizer
29.01.2018
15:52:31
Банально, inline class SomeId(val value: UUID) чтобы не подснуть чужой айдищник куда не недо.

по сути newtype

Andrew
29.01.2018
15:53:08
или typedef, кому что ближе :)

Sergey
29.01.2018
15:53:31


Andrew
29.01.2018
15:55:54
AllowContractsForCustomFunctions выглядит многообещающе. Интересно, что такое NewInference :)

Sergey
29.01.2018
15:57:22
а еше можно "как бы" union типы делать с помощью них например inline class FeatureOrValue<T>(val value: Any?) { fun asFeature(): Feature<T> = value as Feature<T> fun asValue(): T = if (value is Feature) error("...") else value as T }

или например бесплатный Result<T>

Andrew
29.01.2018
15:59:22
Для полного счастья не хватает сеттеров для свойств, которые умеют принимать типы, отличные от типов самих свойств. Ибо в текущем виде придётся иметь inline set<reified T>()

Sergey
29.01.2018
15:59:29
это нам 1.3 аж осенью ждать походу

Andrew
29.01.2018
16:00:06
Пора начинать жить в мастере :D

Sergey
29.01.2018
16:00:22
eap не будет?

Google
Igor
29.01.2018
16:01:43
Kirill
29.01.2018
16:02:01
а есть где почитать?
нет :( это из внутренних обсуждений

Sergey
29.01.2018
16:02:14
А как это можно?
inline class Result<T>(val value: Any?) { fun asError(): Throwable = value as Throwable fun asValue(): T = if (value is Throwable) throw value else value as T }

Kirill
29.01.2018
16:02:36
если коротко: не надо будет на каждый результат(шаг) continuation'a создавать объект (насколько я помню)

Igor
29.01.2018
16:03:36
inline class Result<T>(val value: Any?) { fun asError(): Throwable = value as Throwable fun asValue(): T = if (value is Throwable) throw value else value as T }
Ну ок, надо будет правда осторожно быть с value, что бы не записать туда наследников Throwable

Sergey
29.01.2018
16:04:18
Ну ок, надо будет правда осторожно быть с value, что бы не записать туда наследников Throwable
можно private спец обертку маркерную сделать, чтобы не класть Throwable напрямую

и тогда гарантированно не сломать

Sergey
29.01.2018
16:05:08
нет :( это из внутренних обсуждений
а когда планируется eap и релиз?)

Sergey
29.01.2018
16:05:18
inline class Result<T>(val value: Any?) { private class Error(t: Throwable) fun asError(): Throwable? = (value as? Error)?.t fun asValue(): T = if (value is Error) throw value.t else value as T }

Kirill
29.01.2018
16:06:05
а когда планируется eap и релиз?)
не знаю :) я не котлин делаю, ничего про их релизы не знаю

Sergey
29.01.2018
16:08:02
вот тут кстате обсуждение про Result<T> https://youtrack.jetbrains.com/issue/KT-18608

Andrew
29.01.2018
16:17:34
Почему-то я даже не удивлён, что в обсуждение набежали функциональщики и вытеснили остальных)

Igor
29.01.2018
16:20:26
Ну а зачем здоровым людям Result, когда можно кидать исключения ?

Andrew
29.01.2018
16:24:33
Чтобы хранить и передавать их, как изначально описано в issue? :)

Sergey
29.01.2018
16:25:51
особенно актуально при работе с коллекциями

Igor
29.01.2018
16:27:43
Чтобы хранить и передавать их, как изначально описано в issue? :)
Разработчикам либ еще понятно, для промисов или вот корутин (это внутрення оптимизация) А обычным пользователям зачем это “хранить и передавать”?

Andrew
29.01.2018
16:29:58
Ну если мы делим разработчиков на разработчиков либ и обычных пользователей, то у последних это обычно уже спрятано за библиотеками, да.

Google
Виталий
29.01.2018
16:33:31
Тут можно задавть вопросы по непооняткам ? )

Andrew
29.01.2018
16:33:50
Тут можно не задавать вопросы, можно ли задавать вопросы. То бишь дерзайте.

Виталий
29.01.2018
16:35:56
без init как реализовать ? или так и должно быть. Что бы не передавать с дочернего в родительский



вообще думал параметры передавать в родительский класс но туда чето не пихается )

регион должен быть обязательным параметром, остальные по умолчанию

Konstantin
29.01.2018
16:38:12
А что делают методы в init?

Виталий
29.01.2018
16:38:20
Sprite - класс с либы LibGDX

Quantum Harmonizer
29.01.2018
16:38:48
без init как реализовать ? или так и должно быть. Что бы не передавать с дочернего в родительский
хмм, если упростить, то задача выглядит как «как передать так, чтобы не передавать»? Кстати, что будет, если позвать setRegion извне? Tile же не узнает об этом и будет жить в заблуждении?

Виталий
29.01.2018
16:38:51
загоняю регион текстуры в родительский класс Спрайт ну и координаты

если упростить, то можно дать ответ без подковырок... ну или промолчать... я третий день кго изучаю

его*

setRegion меняется на region самим котлином, так что я как понял без разницы как мне загонять this.region = region или setRegion(region)

Andrew
29.01.2018
16:42:47
> Tile же не узнает об этом и будет жить в заблуждении? Tile и не знает ничего об актуальных значениях x, y и т.п., они ж не свойства, а просто параметры конструктора.

Виталий
29.01.2018
16:43:28
а поччему тогда они обявляеются без ошибок без val ?

в конструкторе

он я так понял берет их от родительского Sprite

Andrew
29.01.2018
16:44:05
Если вам нужно в конструкторе вызвать какие-то методы, то делается это в init { ... }, всё нормально. Ваши region, x, y, width, height -- это параметры конструктора и доступны они только в init { ... }

Виталий
29.01.2018
16:45:04
в книжке вроде смотрел проще как то было... ща найду перечитаю, спасиб )

Google
Andrew
29.01.2018
16:45:15
о, я, как всегда, невнимателен
Я тоже не сразу заметил, потому и озвучил явно.

Quantum Harmonizer
29.01.2018
16:45:21
а поччему тогда они обявляеются без ошибок без val ?
Без val это параметры конструктора, которые доступны только в пределах init

Andrew
29.01.2018
16:45:41
в книжке вроде смотрел проще как то было... ща найду перечитаю, спасиб )
Поделитесь с чатиком, мне даже интересно стало, как это предлагается сделать проще :)

Виталий
29.01.2018
16:46:17
я гвоорю когда читал, проще выглядило ))) щас пересмотрю )

может показалось)

Andrew
29.01.2018
16:48:27
Я просто не сильно понимаю, куда уже проще -- параметры для конструктора указаны, в "теле конструктора" методы вызваны, всё прекрасно. Просто размазано оно по двум местам, да, но это плата за красоту свойств и параметров конструктора, объявленных в одном месте.

Andrew
29.01.2018
16:48:54
Да, к этому придётся некоторое время привыкать :)

Виталий
29.01.2018
16:48:59
ну просто с этим init получается громоздко... в таком случае можно не задавать параметры таким образом, а просто создать конструктор, или в constructor конструкторе я не смогу явно задать обязательные и не обязательные параметры ? Если так то да ))

Andrew
29.01.2018
16:49:29
можно написать вторичный constructor и сделать в одном месте
Можно и вторичный конструктор определить, но зачем? Автору один конструктор нужен, насколько я понимаю.

Andrew
29.01.2018
16:49:57
А во вторичном конструкторе можно проперти определять?

Виталий
29.01.2018
16:50:07
нужен 1, что бы не передавать то что в данный момент мне не нужно, (проинициализированые параметры были что би)

Igor
29.01.2018
16:50:18
ну просто с этим init получается громоздко... в таком случае можно не задавать параметры таким образом, а просто создать конструктор, или в constructor конструкторе я не смогу явно задать обязательные и не обязательные параметры ? Если так то да ))
По моему по другому и не получится (давненько писал на нем игрулю + kotlin - вроде так же делал), libgdx по своей архитектуре очень мутабельный - там норм в конструкторе вызвать методы инициализации. Разве что сделать свой базовый класс для спрайтов.

Andrew
29.01.2018
16:50:53
Потому я и говорю, что если нужны и параметры, и проперти, и начальные значения проперти передавать в конструкторе, то вот это вот -- самый простой и адекватный вариант. Вторичный конструктор потащит за собой дублирование кода.

Виталий
29.01.2018
16:51:14
ясно )) спасиб

Andrew
29.01.2018
16:53:30
Как до ECS дойдёте (если вдруг будете использовать, конечно) -- порадуетесь этому синтаксису, с ним объявлять системы и компоненты -- одно удовольствие :)

Виталий
29.01.2018
16:54:08
По моему по другому и не получится (давненько писал на нем игрулю + kotlin - вроде так же делал), libgdx по своей архитектуре очень мутабельный - там норм в конструкторе вызвать методы инициализации. Разве что сделать свой базовый класс для спрайтов.
А по производительности что скажете ? Читал что котлин компилит в байткод джава, ну и дальше jvm шпарит, и вроде как все норм. Вот конкретно в либгдх стоит его юзать ? не потеряю в скорость выполнения ?

Виталий
29.01.2018
16:55:21
это радует)

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