
Roman
28.02.2017
05:23:40
@dron247 т.е. на выхлопе мы получаем вот это: https://kotlinlang.org/docs/reference/whatsnew11.html ;)

Andrew
28.02.2017
05:23:59

pplcf
28.02.2017
05:27:38
чето расстроили они с корутинами
теперь 1.2 ждать

Google

Boris
28.02.2017
05:28:22
Использовать то их никто не мешает
Есть конечно вероятность, что библиотеки придется допилить

Andrew
28.02.2017
05:31:56
чето расстроили они с корутинами
Вывод, притворяться в боевом коде, что не знаешь про фишку, пока она не будет в релизе и на stack overflow не наберется хотябы три экрана вопросов по ней)

Roman
28.02.2017
07:42:10
@pplcf нет, наоборот, весь смысл моего поста в том, что ждать 1.2 не нужно ;)

Sergey
28.02.2017
07:46:04
sealed class Expr {
class Num(val value: Int) : Expr()
class Sum(val left: Expr, val right: Expr) : Expr()
}
fun eval(e: Expr): Int =
when (e) {
is Expr.Num -> e.value
is Expr.Sum -> eval(e.right) + eval(e.left)
}
без sealed тогда нужен была была б else ветвь

Andrew
28.02.2017
07:50:55

Boris
28.02.2017
08:07:02
"класс сабклассы которого его же и наследуют, интересное решение" -- обычно если класс является сабклассом какого-то другого класса, то это значит, что именно от него он и унаследован, это решение безусловно интересное, но не не очень новое

Руслан
28.02.2017
08:13:50
http://talkingkotlin.com/libgdx-with-mario-zechner/

Igor
28.02.2017
08:33:23

Boris
28.02.2017
08:37:08
> Удобно в том же libGDX, если реализуешь свои классы спрайтов
и потом в onDraw рисуешь все дерево вложенных спрайтов по разному в зависимости от типа.
а виртуальные функции для этого почему не использовать? из за скорости? если да, то можно где-то посмотреть эти измерения?

Google

Igor
28.02.2017
08:41:56

Quantum Harmonizer
28.02.2017
09:00:18

Igor
28.02.2017
09:02:40
https://discuss.kotlinlang.org/t/implementation-suggestion-for-the-upcoming-data-class-inheritance/1731/2?u=y2k
Сейчас глянул байткод из 1.1 - ее еще нет, плюс для "Sum -> eval(...) + eval(...)" байткод "CHECKCAST Sum" вызывается два раза.

Quantum Harmonizer
28.02.2017
09:23:51

Andrew
28.02.2017
10:15:58

Boris
28.02.2017
10:22:59
Я к тому, что этот приём называется наследование. В таком описании по крайней мере

Михаил
28.02.2017
10:28:25
никто не знает
есть декомпилятор для котлина?

Quantum Harmonizer
28.02.2017
10:29:11
нет
есть конвертер j2k :)

Михаил
28.02.2017
10:29:34
ну он валится иногда изза котлина

Andrew
28.02.2017
10:32:50
Декомпилеры обычно даже лямбды не понимают а тебе еще в котлен разбери

Михаил
28.02.2017
10:35:11
как не понимают
ну ретролямбду хавает
анонимный класс просто выдает

Andrew
28.02.2017
10:36:02
Ну в лямбду то не собирает

Dzmitry
28.02.2017
10:51:35
>есть декомпилятор для котлина?
Для джавы нормальных нету, для котлина тем более

Quantum Harmonizer
28.02.2017
10:51:54

Andrew
28.02.2017
10:55:41

Google

Dzmitry
28.02.2017
11:00:14
котлиновский код зачастую нормально в обычную джаву декомпилится

Михаил
28.02.2017
11:01:02

Dzmitry
28.02.2017
11:01:50
я к тому, что если 6 джаву еще пережевывают. то с 8 уже проблемы

Quantum Harmonizer
28.02.2017
11:04:32

Andrew
28.02.2017
11:05:24

Dzmitry
28.02.2017
11:05:38
да, в 8 джаве лямбды ж через invokedynamic. Ретролямбда просто перекалбашивает AST дерево, заменяя все их вызовы на анонимные классы грубо говоря.

Quantum Harmonizer
28.02.2017
11:05:42

Dzmitry
28.02.2017
11:06:41
ну он тебе покажет что-то удобочитаемее байткода. Он не востановит тебе твой класс, прям как он в IDE у тебя отображается

Andrew
28.02.2017
11:08:32
Я к тому, что лямбды - языковой конструкт и декомпилеры в него не умеют нормально

Dzmitry
28.02.2017
11:09:09
да

Andrew
28.02.2017
11:09:12
Почти 10 лет не умеют

Quantum Harmonizer
28.02.2017
11:13:01

Dzmitry
28.02.2017
11:14:25
О, не слышал о таком раньше
А они скромные ребята. Цитата с гитхаба:
Fernflower is the first actually working analytical decompiler for Java and probably for a high-level programming language in general.

Quantum Harmonizer
28.02.2017
11:15:15

Andrew
28.02.2017
11:15:39
Круто

Dzmitry
28.02.2017
11:15:41
ну я не знал что там под капотом
А он в любой редакции IDEA есть? Или только в Ultimate?
Просто если я тыкаю в класс файл мне декомпилированный код показывается как-то так
@android.support.annotation.Nullable
public static android.graphics.Bitmap getImageThumbnail(android.content.Context context, android.net.Uri imageUri, android.net.Uri previewUri) { /* compiled code */ }

Quantum Harmonizer
28.02.2017
11:22:43

Google

Quantum Harmonizer
28.02.2017
11:23:01
или же декомпилятор не смог)

Dzmitry
28.02.2017
11:23:32
так он никогда не может по моим наблюдениям
все время { /* compiled code */ }

Quantum Harmonizer
28.02.2017
11:24:11
значит

Руслан
28.02.2017
11:34:35
(ctrl+shift+a -> decompile kotlin to java), пожалуйста
Новый Akka Api для джавы выглядит хуже из котлина, чем старый) https://github.com/KotlinBy/kotlin-akka/commit/540f8a64f4cf22e764e39558faa2176b06c0550e#diff-2f5022c4e7583fbb78aec45e0e32720bR10

Admin
ERROR: S client not available

Наиль
28.02.2017
12:42:06
ребят, а как тоже самое сделать в котлине?
в конечном итоге у меня типы не совпадают
и readValue не может найти подходящую перегрузку метода
https://www.leveluplunch.com/java/examples/convert-json-array-to-arraylist-of-objects-jackson/
т.е. json [{Item},{Item}] смапить в List<Item>

Руслан
28.02.2017
12:44:52
Меня напрягает что в классе написано linkText, а дальше key
а вообще должно работать, покажи какая ошибка

Наиль
28.02.2017
12:46:19
Type inference failed: Not enough information to infer parameter T in fun <T : Any!> readValue(content: String!, valueType: JavaType!): T!
Please specify it explicitly.
val type = TypeFactory.defaultInstance().constructCollectionType(List::class.java,VersionJson::class.java)
val j = mapper.readValue(text, type)
переменная type в данном случае имеет тип CollectionType!

Руслан
28.02.2017
12:47:23
val j: List<VersionJson> = ...
а так?

Наиль
28.02.2017
12:48:26
Не ругается! Сам не допер: спасибо

Руслан
28.02.2017
12:48:48
Компилятор в данном случае не смог вывести тип, вот и ругался

Google

Наиль
28.02.2017
12:49:45
Да, уже сейчас все прозрачно стало и очевидно :) а тогда я малось удивился


Roman
28.02.2017
13:44:20
когда только попробовал котлин поразился насколько в IDE крутой тулинг для него и было впечатление, что почти все как в джаве. но позже заметил одну очень неприятную особенность, которая сильно напрягает. допустим я пишу lastNameEdt.addTextChangedListener( и хочу дальше сделать анонимный инстанс для листенера. в джаве мне достаточно было написать new и дальше IDE сама подсказывала мне нужный класс или интерфейс и я мог просто нажать энтер и получить код его реализации. в котлине по идее слово new заменяется object и да мне даже предлагают выбрать какой анонимный класс я хочу и я могу его выбрать и получить реализацию. но вот только выбор этот нерелевантный. чаще всего нужный интерфейс либо однозначный либо это быбор из 2-3 вариантов. но IDE предлагает кажется вообще все что видно в проекте. как-то можно побороть это?
также непонятно как я могу попросить IDE лямбду использовать вместо анонимного класса, если интерфейс функциональный


Стас
28.02.2017
13:46:19
ключевое слово object != ключевое слово new
мб инлайн функцией?

Roman
28.02.2017
13:46:59

Стас
28.02.2017
13:47:13
Посмотри, мы что-то переводили из оф. доки на эту тему: kotlinlang.ru
Object Expressions and Declarations
заголовок я постремался переводить, пока думаем

Roman
28.02.2017
13:48:37
у меня вопрос не по языку
у меня вопрос по тулингу
и тому как получить автодополнение
в джаве нажатие 2 кнопок приводило к генерации всего бойлерплейта в который я мог написать заветную строчку логики которая мне нужна. а с котлином, я должен пойти в класс, посмотреть какого же типа должен быть параметр, потом вернуться и руками набрать этот тип в предложенном списке
это как-то очень странно
либо я что-то делаю совсем не так

Руслан
28.02.2017
13:50:58
ctrl+shift+space

Roman
28.02.2017
13:51:20
ничего не происходит по этой комбинации
нажимаю после скобки метода

Стас
28.02.2017
13:52:31
у меня в шорткатах это записано как "return to last edit place"