@kotlin_lang

Страница 729 из 982
dimiii
28.06.2018
12:54:57
я просто не вижу профита от этого поэтому и спросил) можем еще викторины по субботам проводить с призами
Ну придет такой новичок, с вопросом, есть ли на котлин аналог ASP.NET MVC - выполнит поиск и узнает. Это в идеальном случае, конечно

Google
Bogdan
28.06.2018
13:02:44
ведь доку незачем читать

dimiii
28.06.2018
13:15:06
Ок, что-то полезное я вынес из этого обсуждения https://github.com/kittinunf/Fuel

https://github.com/kittinunf/Fuel/blob/master/fuel-coroutines/src/test/kotlin/com/github/kittinunf/fuel/coroutines/CoroutinesTest.kt

Bogdan
28.06.2018
13:24:13
https://github.com/vkostyukov/kotlin-sublime-package кто пользовался ? Я просто в третем устанавливал пакет котлина, он чемто отличается ?

я так понял, только подсветка

Disly
28.06.2018
13:45:41
Логично

Жабра
28.06.2018
21:14:02
https://m.habr.com/post/415471/ хех.)

Sergey
28.06.2018
21:38:45
оо, мы такое хотели делать на поиграться)

Bogdan
28.06.2018
22:11:39
https://m.habr.com/post/415471/ хех.)
типа дайте мне, но разбиратся не буду

Dumitru
28.06.2018
22:18:14
Будет ли что то новое среди client ui фреймворков для kotlin-js ?

Sergey
28.06.2018
22:21:10
есть же реакт)

ну и Ring UI

Google
Dumitru
28.06.2018
22:22:59
я слышал про что то нативное (от компании)

про Ring UI не знал, спс

Alexander
29.06.2018
07:11:41
Напоролся на такую проблему: у меня есть некотороая информация о классе, которая хранится в пропертях, а точнее в их делегатах (в частности там сидят значения по-умолчанию для параметров). Делегаты не используют thisRef родительского класса. Я спокойно могу получить список пропертей класса, но оказывается, что для того, чтобы получить инстанс делегата, мне зачем-то нужен инстанс родителя, причем null не годится. Что за фигня? И как с этим бороться?

Справился путем передачи Unit в качестве ресивера, но все равно конструкция кажется странной

Все, кажется понял, почему оно так...

Alexei
29.06.2018
07:40:30
мне кажется что мой левел кт слишком низкий что бы просто осознать проблему уже не говоря о ее решении...

Alexander
29.06.2018
07:42:33
Делегаты - очень мощная штука, но они очень хитро инстанцируются

Конструктор делегата таки требует существования объекта ресивера, и это наверное обойти невозможно.

Alexander
29.06.2018
07:44:33
Да.

Точнее про их инстансы

Bogdan
29.06.2018
07:45:06
Да.
ну Бреслав говорил, что это сложно подерживаямая штука

и там есть странности

Alexander
29.06.2018
07:45:24
Безусловно, но супермощная.

Bogdan
29.06.2018
07:45:47
Безусловно, но супермощная.
а ты для чего сейчас его применяешь ?

Alexander
29.06.2018
07:45:48
В данно случае я сам баклан. Инстанс делегата конечно не может существовать без инстанса объекта

У меня есть некоторая конфигурационная структура, и я из нее делегатами тяну отдельные элементы. А теперь хочу сделать авто-документируемую систему, которая будет знать, какие свойства используются. Раньше я делал это полностью на аннотациях

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

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

Bogdan
29.06.2018
07:47:55
Google
Alexander
29.06.2018
07:48:40
Ну примитивный пример есть и в stdlib: https://kotlinlang.org/docs/reference/delegated-properties.html#storing-properties-in-a-map

Просто у меня более сложная управляющая структура. Там можно использовать в принципе все, что угодно, хоть json, хоть что

а сам делегат выглядит вот так: class ValueDelegate<out T>( val target: Meta, val valueName: String? = null, val def: T? = null, private val converter: (Value) -> T ) : ReadOnlyProperty<Any?, T> { private var cached: T? = null private fun getValueInternal(thisRef: Any?, property: KProperty<*>): T { val key = valueName ?: property.name return when { target.hasValue(key) -> converter(target.getValue(key)) def != null -> def else -> converter(getDescribedValue(key, thisRef, property)) } } override operator fun getValue(thisRef: Any?, property: KProperty<*>): T { if (target is SealedNode && cached == null) { cached = getValueInternal(thisRef, property) } return cached ?: getValueInternal(thisRef, property) } }

Konstantine
29.06.2018
07:55:37
Ну примитивный пример есть и в stdlib: https://kotlinlang.org/docs/reference/delegated-properties.html#storing-properties-in-a-map
Выглядит так себе, как по мне. Ничего удобного, кроме lazy, пока с ними не встречал.

Alexander
29.06.2018
07:57:44
На вкус и цвет все фломастеры разные, но вопрос в том, что делать. Делегаты очень активно используются например в tornadofx, маскируя достаточно страшные проперти в JavaFX

Roman
29.06.2018
08:14:00
Как можно сделать val проперти внутри secondary constructor ?

что-то типа такого class Person(val name: String) { constructor(age: Int): this("") { println("Constructor with age $age") } }

Alexander
29.06.2018
08:15:53
А в чем тут проблема?

Roman
29.06.2018
08:16:29
idea говорит что нельзя писать val age

Лёша
29.06.2018
08:17:02
объяви age внутри класса и в secondary конструкторе уже присваивай ему значение

Alexander
29.06.2018
08:17:13
конечно нельзя. Это должно быть поле класса. Например var age: Int? = null

При этом оно может быть null, так как главный конструктор его не присваивает

Roman
29.06.2018
08:18:01
я просто думал что пройдет такой же финт, как и с class Person(val field: String), где он автоматом сгенерирует проперти

Alexander
29.06.2018
08:18:26
А как тогда вызов по главному конструктору его присвоит?

Roman
29.06.2018
08:18:46
да, тоже верно

после go мозги атрофируются )

dimiii
29.06.2018
08:19:55
после go мозги атрофируются )
А по-моему, это просто мутное место в котлине

Roman
29.06.2018
08:21:09
А по-моему, это просто мутное место в котлине
Есть такое. После go многи вещи в котлине воспринимаются как в штыки

1337
29.06.2018
08:21:35
интересно

а почему не на го пишете?

Google
Alexander
29.06.2018
08:21:52
Плата за типо-безопасность

1337
29.06.2018
08:22:01
там наверное тоже свои подводные камни есть

Roman
29.06.2018
08:22:05
Лёша
29.06.2018
08:22:10
А по-моему, это просто мутное место в котлине
по-моему, довольно логичное пытаться объвить два разных поля в разных конструкторах как val, а далее не инициализоровать одно в другом конечно ругнётся надеюсь, понятно написал)

dimiii
29.06.2018
08:22:14
Есть такое. После go многи вещи в котлине воспринимаются как в штыки
Для меня "попахивают" делегаты, компаньоны и объявление конструкторов

1337
29.06.2018
08:22:46
Для меня "попахивают" делегаты, компаньоны и объявление конструкторов
по мне все четко, хотя проперти делегаты некрасивые

Alexander
29.06.2018
08:23:05
Руки прочь от делегатов. Там не все гладко, но идея отличная. К объявлению конструкторов надо привыкнуть, но после этого очень удобно.

1337
29.06.2018
08:23:43
вы про доп. слово constructor?

или что

1337
29.06.2018
08:24:07
А зачем его писать?
так я спросил

что в конструкторах не нра

Anton
29.06.2018
08:24:48
А зачем его писать?
если DI использую

Alexander
29.06.2018
08:29:46
Ну я этой штукой не пользуюсь. Я знаю, что Бреслв на нее ругался, но какая-то большая мысль там вроде есть

Boris
29.06.2018
12:03:52
Декораторы удобно писать
Не только декораторы, но и миксины

Но работает оно не совсем как хотелось бы для этого

Bogdan
29.06.2018
12:11:03
Google
Mikhail
29.06.2018
12:23:13
Ребят, такой вопрос: кто нибудь писал плагины для IntelliJ? Есть какие-нибудь внятные гайды (лучше на котлине). Хочу добавить Quick fix свой для андроидовых ресурсов в xml

dimiii
29.06.2018
12:43:29
И очень полезный раздел https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/psi.html

Mikhail
29.06.2018
13:15:58
я писал...
Хорошо, подскажи, сделать свой quick fix для xml ресурсов андроеда возможно? Хочу чтобы он всякие точные значения вроде "8dp" подсвечивал и по alt-enter предлагал заменить на ресурс из dimen.xml с таким же значением

Kirill
29.06.2018
13:18:22
Ага, ознакомлюсь на досуге, спасибо)
тебе нужно что-то рядом с com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement

Mikhail
29.06.2018
13:19:15
что вообще значит (абревиатура?) PsiElement?

dimiii
29.06.2018
13:19:26
а зачем тебе это понадобилось?
Я думал с этой штукой мне будет проще разобраться как устроено API и работа с плагинами

Kirill
29.06.2018
13:19:45
Я думал с этой штукой мне будет проще разобраться как устроено API и работа с плагинами
не. это в первую очередь для нас, проверять что мы не сломали чужие плагины

dimiii
29.06.2018
13:21:19
не. это в первую очередь для нас, проверять что мы не сломали чужие плагины
Ок, а есть что-то типа сниффера API? Чтобы вот выполняешь действие с элементом ui и тебе выводит полезную информацию

Mikhail
29.06.2018
13:21:23
Окей, спасибо

Kirill
29.06.2018
13:22:33

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