@kotlin_lang

Страница 767 из 982
Евгений
23.07.2018
10:13:09
JVM-ный плагин подключается в основном файле build.gradle т.к. котлин во всех модулях (subproject-е), а kotlin2js толко в одном

я так понимаю идея дрянь подключать плагины в общем build.gradle

или kotlin2js включает в себя JVM-ный плагин?

Google
Alexander
23.07.2018
10:16:05
идея нормальная, если они везде используются. Jvm плагин и js плагин - это две большие разницы. Вместе в одном модуле они жить не могут

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

Mikhail
23.07.2018
10:17:23
ребят, подскажите, как подсмотреть как реализован equals в таком случае class Foo { fun bar() {} fun baz() {} } val foo = Foo() print(foo::bar == foo::bar) // true print(foo::baz == foo::bar) // false

Alexander
23.07.2018
10:17:38
тьфу, я имел в виду многоплатформенную

Евгений
23.07.2018
10:17:48
хм, но ведь этот модуль содержит лишь DTO-хи, которые используются в JS и на сервере

и поэтому типа компилим его и в JS и просто

и пару лет назад все работало)

Alexander
23.07.2018
10:18:30
Там плагин вообще другой: https://kotlinlang.org/docs/reference/multiplatform.html

Mikhail
23.07.2018
10:19:45
не понял, что сравнивается указатели на функции что ли?
это ж не С++, какие указатели на функцию?

сам удивлен, что работает

Alexander
23.07.2018
10:20:17
обычные, foo::bar - это функциональный объект, указывающий на метод класса. Сравниваются они по ссылке

Google
Quantum Harmonizer
23.07.2018
10:20:30
Konstantine
23.07.2018
10:21:05
Могу ли я написать обычную функцию (fun), которую можно прокинуть в Rx цепочку для обработки? Если да, скинь пожалуйста пример.

Mikhail
23.07.2018
10:21:49
а почему нет?
я бы остерегался использовать слово "указатель" при работе с java/kotlinjvm

Alexander
23.07.2018
10:22:08
Хорошо, reference

Mikhail
23.07.2018
10:22:23
identity
неа, foo::bar === foo::bar дает false

dimiii
23.07.2018
10:22:42
Интересно, я что-то не нахожу строго-го формального описания семантики method reference

Quantum Harmonizer
23.07.2018
10:23:07
неа, foo::bar === foo::bar дает false
наверное, сравнивает имя классса и проперти)

Alexander
23.07.2018
10:23:19
Function references, оно так в официальной документации и называется

https://kotlinlang.org/docs/reference/reflection.html#bound-function-and-property-references-since-11

Alexey
23.07.2018
10:24:50
наверное, сравнивает имя классса и проперти)
Лямбы же создаются, какие нафиг имена ?

Quantum Harmonizer
23.07.2018
10:25:00
Alexander
23.07.2018
10:25:06
Не, там не лямбды

Quantum Harmonizer
23.07.2018
10:25:31
лямбда — это такая штука с полужирными фигурными скобками и опциональной стрелкой

Alexey
23.07.2018
10:25:37
Кек, а как по вашему можно получить ссылку на метод объекта?

Quantum Harmonizer
23.07.2018
10:25:52
Кек, а как по вашему можно получить ссылку на метод объекта?
сгенерировать класс, который реализует определённый интерфейс

Alexander
23.07.2018
10:25:54
Там получаются инстансы KFunction, но не те же самые, что из лямбд делаются

Alexey
23.07.2018
10:26:42
Нууу, sam для jvm8 скомпилится в static lambda

так что я хз

Konstantine
23.07.2018
10:27:20
Quantum Harmonizer
23.07.2018
10:27:27
Нууу, sam для jvm8 скомпилится в static lambda
зависит от того, что называть static lambda

Google
Mikhail
23.07.2018
10:36:41


Alexander
23.07.2018
10:42:02
это бага.

Алексей
23.07.2018
17:30:57
Всем привет возник интересный вопрос про универсальную функцию. Есть 2 класса. class A(){ var a: Int=0 } class B(){ var b: Int=0 } Вопрос такой: как написать универсальную функцию которая будет увеличивать значение в поле экземпляра ккласса независимо от того какого класса аргумент функции? Нужно что то вродее этого (далее псевдокод чтобы показать что мне нужно сделать): fun plusOne(somethingObject: SomethingClass){ somethingObgect.field++ return something }

Да и можно ли так сделать в принципе?

Konstantine
23.07.2018
17:33:05
Сделать их потомками одного класса или интерфейса, в котором будет объявлено это поле.

Алексей
23.07.2018
17:33:30
Это да, а еще какие-то варианты

Алексей
23.07.2018
17:35:51
Да про оператор :: я читал, но не понял как его тут можно применить

dimiii
23.07.2018
17:36:21
Это да, а еще какие-то варианты
Лойс. >будет увеличивать значение в поле экземпляра ккласса независимо от того какого класса аргумент функции? Дословно звучит как определение полифморфизма. Какие еще варианты? ) A: Countable B: Countable

Alexander
23.07.2018
17:36:53
Да и можно ли так сделать в принципе?
Инструментами языка нельзя, только рефлектами, и лучше не стоит так делать.

Alexander
23.07.2018
17:37:55
Собственно ссылка на свойство - это тоже рефлекты, но оно тут не поможет. Для того, чтобы его вызвать, нужно иметь тип вызываемого объекта, для произвольного типа это сделать нельзя

dimiii
23.07.2018
17:38:11
Возможности AspectJ еще приходит в голову, но это того же рода извращения, что и рефлексия

Alexander
23.07.2018
17:38:13
Если что, это называется duck typing и Groovy это отлично умеет

Алексей
23.07.2018
17:38:37
Все понятно, буду делать тогда с помощью средств ООП, думал вдруг кто знает какие прибамбасы)

Alexander
23.07.2018
17:39:10
Кстати, есть довольно положительный опыт мешания в один проект java, groovy и kotlin, так что ничего нелегального тут нет.

Anton
23.07.2018
17:39:31
у нас тоже так. но груви только в тестах)

Quantum Harmonizer
23.07.2018
17:40:01
Да про оператор :: я читал, но не понял как его тут можно применить
передавать вместе с объектом его property reference: func(a, A::a) func(b, B::b)

Google
Alexander
23.07.2018
17:40:01
У меня груви в пользовательской консоли.

передавать вместе с объектом его property reference: func(a, A::a) func(b, B::b)
Ну это тоже изврат, лучше уж сделать функционально и инвертировать контроль, передавать действие а не объект

Алексей
23.07.2018
17:41:09
передавать вместе с объектом его property reference: func(a, A::a) func(b, B::b)
Обясни пожалуйста поподробнее как будет выглядеть сама функция plusOne

Admin
ERROR: S client not available

Alexander
23.07.2018
17:41:43
ОПАСНО! Для человека, задающего подобные вопросы кмк
Вообще никаких особых проблем. Единственное о чем следует помнить, что вызов kotlin из groovy - это легко, а вот обратно не всегда. Лучше сразу проектировать так, что бы на груви была только обертка.

Quantum Harmonizer
23.07.2018
17:42:42
Обясни пожалуйста поподробнее как будет выглядеть сама функция plusOne
fun <T> addOne(obj: T, prop: KMutableProperty1<T, Int>) { prop.set(obj, prop.get(obj) + 1) }

Alexander
23.07.2018
17:42:49
хде. В дискуссии? Вряд ли, вариант с наследованием был отвергнут

Quantum Harmonizer
23.07.2018
17:42:54
но вообще это дичь, а изменяемые объекты чаще вредны

Bogdan
23.07.2018
17:43:02
Quantum Harmonizer
23.07.2018
17:43:15
Quantum Harmonizer
23.07.2018
17:43:33
Это лёгкая рефлексия. Не прон а эротика ?

Bogdan
23.07.2018
17:43:48
Почему?
Потом будет везде такой код

Alexander
23.07.2018
17:43:54
Ну это не то чтобы совсем рефлексия, рефлексия в том месте, где этот проперти получается. Так это просто набор геттера и сеттера

В рефлексии нет ничего крименального , пока не начинаешь ее везде вставлять

Quantum Harmonizer
23.07.2018
17:44:26
Спасибо
очень надеюсь, что это было proof of concept

dimiii
23.07.2018
17:44:33
Спасибо
Скажи, ты остановился на этом варианте, и почему если так?

Quantum Harmonizer
23.07.2018
17:44:44
Google
Alexander
23.07.2018
17:44:48
Спасибо
Не надо так делать.

Алексей
23.07.2018
17:45:43
Не надо так делать.
Ладно не буду) Просто интересно было можно ли такое сделать с помощью средств языка

Alexander
23.07.2018
17:45:49
всё зависит от того, что именовать рефлексией
Ну то, что описано можно сделать вообще без рефлексии, муторно но можно. Конкретно обращение к конструкциям языка тут не обязательно.

Ладно не буду) Просто интересно было можно ли такое сделать с помощью средств языка
Все можно. Но через попу. Собственно, такие решения ломают статическую типизацию, поэтому язык их и не позволяет. Груви работает на том же самом JVM и возможности эквивалентны, но он это позволяет ибо динамический по природе своей.

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

Bogdan
23.07.2018
17:50:56
Это лёгкая рефлексия. Не прон а эротика ?
В шарпе тоже есть рефлексия, но к ней стараются не прибегать, и я пока был в шарповом чатике даже не слышал про нее

Quantum Harmonizer
23.07.2018
17:51:36
В шарпе тоже есть рефлексия, но к ней стараются не прибегать, и я пока был в шарповом чатике даже не слышал про нее
Да не нужна она практически. Остаётся главный вопрос — что называть рефлексией.

Alexander
23.07.2018
17:52:21
Нуууу... совсем не использовать - это добровольно себе ногу отпиливать. Кое-где оно все-таки очень полезно.

Да не нужна она практически. Остаётся главный вопрос — что называть рефлексией.
Согласен, обычные тайп чеки - это в общем тоже рефлексия

Любой процессинг аннтоаций тоже

Quantum Harmonizer
23.07.2018
17:53:21
Alexander
23.07.2018
17:54:27
Ну в классическом понимании слова, это когда мы к примеру пытаемся получить список методов класса в рантайме. Или вызвать конструктор (или другой метод) напрямую.

Bogdan
23.07.2018
17:54:34
Тогда что такое рефлексия?
Отказаться от опп (где это предусмотрено) в пользу другого подхода

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