джва года , менеджеры распилили горы бабла, но ничего не поменялось.
Прошло
kotlin.KotlinNullPointerException
at com.android.tools.idea.gradle.structure.configurables.BasePerspectiveConfigurable.putNavigationPath(BasePerspectiveConfigurable.kt:291)
at com.android.tools.idea.gradle.structure.navigation.PsDependenciesNavigationPath.queryPlace(PsDependenciesNavigationPath.kt:33)
at com.android.tools.idea.gradle.structure.navigation.PsLibraryDependencyNavigationPath.queryPlace(PsLibraryDependencyNavigationPath.kt:32)
at com.android.tools.idea.gradle.structure.model.PsPlaceBasedPath.getPlaceDestination(PsPlaceBasedPath.kt:34)
at com.android.tools.idea.gradle.structure.model.PsPlaceBasedPath.getHyperlinkDestination(PsPlaceBasedPath.kt:39)
Забавно, если бы переходил на него с джавы, то впечатления были бы совершенно другие) Но я переходил с котлина. И первое впечатление было, блин ну почему вы не могли взять и котлиновских фич потырить раз уж в своем гугле решили котлин-ферст и вот все это.
Я прям не ожидал такой бурной реакции организма, на отсутствие дата классов, не считал их главной фичей котлина, а как оказалось, прям зубы заскрипели от предчувствия, что опять надо херней страдать. Хотя дарт до екстеншинов почти дожил, может и до иммутабельных дата классов в доживет, для которых не надо километры кода писать.
По итогу: ко всему можно привыкнуть, но восторга не вызвало совершенно.
— искал минут двадцать, как им воспользоваться.
— наткнулся на кнопулю в правом верхнем углу в ряду справа от дебага и пр.
— натравил Protein на swagger.json.
— сижу теперь разгребаю, хаскельные типы на местные меняю. переименование называется рефакторингом в этих ваших IDE.
— кажется, что думать не нужно. чисто механическая работа.
— открываем Android Studio.
— всплывает 100500 сообщений об обновлениях (собственно, ради чего это и затевалось).
— читаем все лицензионные соглашения снова (и тут же забываем).
— ждём, пока всё это зло студия подгрузит и поставит.
— попутно проходим квесты вида "установка в установке" с чтением доп. соглашений.
— затем студия предлагает ребутнуть себя. соглашаемся.
— после чего студия рекомендует обновить gradle до более новой версии. окей.
— компиляем/запускаем проект под эмулятор "Android 9 Pie".
— PROFIT! [2 часа (с чтением)!]
#2913164 — мечты сбываются.
Kotlin + Android TV + ExoPlayer + всякое.
Kotlin + Android TV + ExoPlayer + всякое.
In this case login to TeamCity server host. Navigate to <teamcity_data_dir>\system\caches\versionedSettings\ dir. And find which subdirectry contains settings of you project. Copy files fom .teamcity\ folder of you project repository to this dir to fix the issue
import jetbrains.buildServer.configs.kotlin.v10.triggers.vcs
triggers {
vcs {
}
}
@vt (дядечка втирал, что надо абстрагироваться!) и вроде бы определилась в выборе ембедед базы данных — LMDBJava. Что скажете?
Целый день гуглила-гуглила и переругивалась с
kotlinlang.org Как они себе представляют несколько вложенных foreach-ей map-ов и filter-ов? Там просто будет адский ад из лейб этих.
У меня только один вопрос "Что это за пиздец!?" Я это объехал, но код красивее что-то не стал:
```
fun bugaga() : Int = when(true) { else -> {
val z = 5
z
}}
```
Или я чего-то очень-очень не догнал, или Котлин пилили фанаты `goto`...
* Есть Hello World на Котлине: pastebin.com
* Есть описание проекта для Мавена: pastebin.com — тоже ничего особенного, фактически минимум, чтобы Котлин собирался.
Если билдишь в чистый каталог, то всё зашибись. А если билдишь поверх уже собранного, то выдаёт следующую дрянь:
```
[INFO] Kotlin Compiler version 1.0.0-beta-2189
[INFO] Compiling Kotlin sources from [D:\\tmp\\mav\\mavk2\\my-app\\src\\main\\kotlin]
[INFO] Classpath: D:\\tmp\\mav\\mavk2\\my-app\\target\\classes;C:\\Users\\d\\.m2\\repository\\org\\jetbrains\\kotlin\\kotlin-stdlib\\0.1-SNAPSHOT\\kotlin-stdlib-0.1-SNAPSHOT.jar;C:\\Users\\d\\.m2\\repository\\org\\jetbrains\\kotlin\\kotlin-runtime\\0.1-SNAPSHOT\\kotlin-runtime-0.1-SNAPSHOT.jar
[INFO] Classes directory is D:\\tmp\\mav\\mavk2\\my-app\\target\\classes
[INFO] Module name is my-app
[ERROR] D:\\tmp\\mav\\mavk2\\my-app\\src\\main\\kotlin\\name\\dluciv\\test1\\App.kt: (4, 1) ''public fun main(args: kotlin.Array<kotlin.String>): kotlin.Unit'' is already defined in name.dluciv.test1
```
Т.е. он *до смерти* пугается только что откомпилированного самим собой кода. С Java таких дурацких проблем, понятное дело, нету.
С какой стати это происходит и как бороть?
НО. 1) Провоцирует писать пачками map/filter/fold, при этом не являясь скалой. Как Jetbrains будет наращивать производительность получающегося выхлопа.
И. 2) После скалы выглядит всё-таки местами неполноценно и ограничивает в возможностях, только начинаешь разгоняться — хлоп по пальцам! Куда, мол, руки свои суёшь.
Но в целом выглядит перспективно и направление движения выбрано верное.
Пересмотрел презентацию Андрея Бреслава о языке Котлин.
Получается, что они пытаются занять нишу между груви и скалой.
Котлин — статически типизированный язык, и при этом имеет меньше всяких неявных вещей.
В отличие, от Скалы, эти неявности проще диагностировать.
Если по простому, то всегда можно снавигироваться к той или иной реализации прямо в IDE.
В Scala, во многих случаях, без дебаггера не разберёшься откуда применился метод.
Не могу сказать, что это всё краеугольные камни в разработке, но наверное какую-то свою нишу займут, среди тех кому только и нужно что замыканий, да мал-мало синтсахара.
По ссылке объяснение, зачем они изобрели ещё один велосипед.
Там же приводятся отличия от Java и Scala.
confluence.jetbrains.net