@kotlin_lang

Страница 716 из 982
Vladimir
20.06.2018
09:01:02
Ну, в Java было так, Kotlin ушёл от этого
Нет, там тоже такого не было. Java только конвертит результат сама. Т.е. в Java было бы то же самое в такой ситуации.

Ivan Silantev
20.06.2018
09:02:09
ну это как 5/2 разделить и удивлятся почему 2

Vladimir
20.06.2018
09:03:20
ну это как 5/2 разделить и удивлятся почему 2
Ага, хотя переменная же типа double

Igor
20.06.2018
09:08:21
Ага, хотя переменная же типа double
И что лучше, что бы оно неявно конвертилось или не компилировалось?

Google
Vladimir
20.06.2018
09:09:54
И что лучше, что бы оно неявно конвертилось или не компилировалось?
Текущая ситуация, когда оно работает, но не всегда так, как ожидалось, а IDE ругается, вполне норм, как по мне. Это известная фишка при работе с числами на любом языке.

Igor
20.06.2018
09:11:56
Ну в некоторых языках присваивание 5/2 в float даже не скомпилируется, без ручного каста

Alexander
20.06.2018
09:42:03
Я несколько раз в Java на эти 5/2 очень неприятно нарывался. Особенно, когда там не 5, а какое-то интовое выражение. Так что мне очень нравится, что Kotlin от этого ушел.

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

Quantum Harmonizer
20.06.2018
09:46:38
Коллега спросил, а я ввалился в ступор: «зачем ключевое слово tailrec? Почему компилятор сам не определит хвостовую рекурсию?»

Konstantin
20.06.2018
09:47:31
Нннннну может кто-то по каким-то причинам не хочет разворачивать ее в цикл?

Руслан
20.06.2018
09:48:01
Quantum Harmonizer
20.06.2018
09:49:19
? спасибо

Alexander
20.06.2018
09:49:28
1. Чтобы компилятор не тормозил 2. Чтобы точно была, иначе будет плохо
Ну это и аннотацией можно сделать. Я думаю, ввели, чтобы хаскелисты и прочие функционало-маньяки были счастливы сразу, без залезания глубоко в документацию.

Руслан
20.06.2018
09:52:16
Да и вопрос как я понял не про то что "почему это не аннотация?", а про то что "почему не автомагически?"

Alexander
20.06.2018
09:54:55
Чтобы минимизировать количество ключевых слов. Есть большое количество людей (и я к ним отношусь), считающих, что ключевых слов должно быть минимальное количество. tailrec - это очень специфический случай, я за свою жизнь не разу им не пользовался и желания не вознкало. Я не спорю с мыслью что "что-то" нужно, иначе компилятор запутается.

Google
Alexander
20.06.2018
09:56:29
Ну это и аннотацией можно сделать. Я думаю, ввели, чтобы хаскелисты и прочие функционало-маньяки были счастливы сразу, без залезания глубоко в документацию.
Не думаю, т.к.: 1. Из коробки Котлин крайне далёк от удовлетворения спроса хаскеллистов. Curry/Uncurry нету, паттерн матчинга нету, композиции функций нету и т.д. 2. В целом позиция была, что soft keyword лучше, чем аннотация. Хочешь называть переменную tailrec - называй.

Alexander
20.06.2018
09:57:12
Не спорю. Вопрос эстетики.

Vladimir
20.06.2018
11:39:50
Android?

picty
20.06.2018
11:40:02
Vladimir
20.06.2018
11:42:13
В списке просто несколько одинаковых экземпляров Calendar (он мутабельный) Надо создавать копию или что-то вроде того

picty
20.06.2018
11:43:40
Или класть в список timeInMillis
да - об этом тоже подумал - а потом видимо переводить в календарный эррей - потому как нужен именно эррей календарей)

Konstantine
20.06.2018
12:07:13
Мы их компаньона можем получить класс его родителя?

Виталий
20.06.2018
12:21:40
Добрый день, Можно ли в класс библиотеки добавить свое поле var, или изменить тип существующего var?

типа функции расширения, только расширить класс новым var

Alexander
20.06.2018
12:26:17
Но совсем новое поле не подложишь.

Виталий
20.06.2018
12:41:48
Есть extension properties: https://kotlinlang.org/docs/reference/extensions.html#extension-properties
я не понял, честно сказать. хотел добавить в этот класс поле: https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Actor.html

или заменить тип существующего

dimiii
20.06.2018
12:49:17
я не понял, честно сказать. хотел добавить в этот класс поле: https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Actor.html
Виталий, python, js из прошлого опыта? Класс Actor не final - можно отнаследоваться и поменять _поведение_.

Alexander
20.06.2018
12:50:30
я не понял, честно сказать. хотел добавить в этот класс поле: https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Actor.html
В тот же самый класс абсолютно новое поле добавить не получится. Можно сделать наследника с новым полем, но не факт, что тебе подойдёт такой вариант. Если же поле можно сообразить из других полей, то можно применить extension property. Так можно в "новом поле" подменить тип старого, если хочется. Чрезмерно упрощу класс выше class Actor(var color: Color) Если у тебя например все акторы используют какой-нибудь SuperColor (который Color, но особый), то можно сделать так: var Actor.superColor : SuperColor get() = color as SuperColor set(value) { color = value } Update: Ну или если у тебя свойство строка, а тебе нужен енам class Actor(var str: String) var Actor.strAsEnum : SomeEnum get() = SomeEnum.valueOf(str) set(value) { str = value.toString() }

Vladimir
20.06.2018
12:51:14
Мы их компаньона можем получить класс его родителя?
На JVM можно так: obj::class.java.enclosingClass.kotlin Возможно, есть способ проще

Виталий
20.06.2018
12:54:11
В тот же самый класс абсолютно новое поле добавить не получится. Можно сделать наследника с новым полем, но не факт, что тебе подойдёт такой вариант. Если же поле можно сообразить из других полей, то можно применить extension property. Так можно в "новом поле" подменить тип старого, если хочется. Чрезмерно упрощу класс выше class Actor(var color: Color) Если у тебя например все акторы используют какой-нибудь SuperColor (который Color, но особый), то можно сделать так: var Actor.superColor : SuperColor get() = color as SuperColor set(value) { color = value } Update: Ну или если у тебя свойство строка, а тебе нужен енам class Actor(var str: String) var Actor.strAsEnum : SomeEnum get() = SomeEnum.valueOf(str) set(value) { str = value.toString() }
в классе есть поле name:String если нельзя добавлять поля, то хотелось бы его заменить name:enumClass.value про extension property так и не понял из вышенаписанного про наследование, я надеялся на универсальность котлина ))) что бы не создавать наследника

Google
Alexander
20.06.2018
13:00:06
Обновил ответ. Мог немного налажать с синтаксисом.

Виталий
20.06.2018
13:02:00
Обновил ответ. Мог немного налажать с синтаксисом.
лишний конструктор, без него не получится ?

Alexander
20.06.2018
13:03:49
Класс я создал для примера, у тебя он уже есть. Строки расширения - три следующих. (Ну или я не понимаю о каком конструкторе идёт речь)

Alexander
20.06.2018
13:05:17
Виталий
20.06.2018
13:06:04
Да, наверное так в твоём случае.
хотя нет, set нужен ведь такой set(value) { strAsEnum = value }

dimiii
20.06.2018
13:07:07
var Actor.strAsEnum : RegionName get() = RegionName.valueOf(name) set(value) { name = value.toString() } вроде оно
Так, просветите меня, var Actor.strAsEnum : RegionName .... — где эта конструкция используется?

Виталий
20.06.2018
13:07:50
Так, просветите меня, var Actor.strAsEnum : RegionName .... — где эта конструкция используется?
пока нигде, хочу здесь https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/Actor.html

dimiii
20.06.2018
13:08:03
ну это будет на top-level ?

Виталий
20.06.2018
13:09:03
Да, наверное так в твоём случае.
пардон, все верно, спасибо, name у нас как переходник получается

dimiii
20.06.2018
13:09:40
все таки прошел по ссылке Extension Properties

Виталий
20.06.2018
13:10:03
ну это будет на top-level ?
все разобрался: var Actor.strAsEnum : RegionName get() = RegionName.valueOf(name) set(value) { name = value.toString() } это мне и нужно было

Alexander
20.06.2018
13:11:17
все разобрался: var Actor.strAsEnum : RegionName get() = RegionName.valueOf(name) set(value) { name = value.toString() } это мне и нужно было
Назови её только хорошо :) strAsEnum так себе имя для реального кода

Виталий
20.06.2018
13:11:29
ты же сказал, что name -- val
не помню где я такое говорил, оно var

Алексей
20.06.2018
14:23:23
Всем привет Я правильно помню, что если мы сделаем val job = launch { ... } ... job.join() И внутри блока launch выкинется exception - он будет выброшен там же?

то есть его можно будет поймать, если обрамить job.join() в try-catch

Pavel
20.06.2018
14:27:14
https://github.com/Kotlin/kotlinx.coroutines/issues/61

Алексей
20.06.2018
14:30:50
Хм... то есть так оно не работает в седьмой джаве?

Google
dimiii
20.06.2018
15:31:25
Народ из JetBrains, вы используете стек lightbend?

2K человек, кто-то же да будет из брейнсов и не разрабатывающих компиляторы

Kirill
20.06.2018
15:33:20
Народ из JetBrains, вы используете стек lightbend?
это тебе в скала чат, там кто-то из скалаплагина, наверное, сидит

dimiii
20.06.2018
15:33:52
ок, пойду к ваннаби-хаскеллистам, спс

Kirill
20.06.2018
15:34:27
ок, пойду к ваннаби-хаскеллистам, спс
в intellij platform ничего такого нет. но у нас java\kotlin а скала плагин написан на скале

dimiii
20.06.2018
15:39:07
Да, у вас мощное лобби. Но я скорее надеялся не на использование разработчиками IDE, компиляторов, а продуктов TeamCity, Upsource итп

Vladimir
20.06.2018
15:40:15
Народ из JetBrains, вы используете стек lightbend?
Это считается?) https://github.com/lightbend/config В ktor используется, по мне так офигенная вещь

dimiii
20.06.2018
15:43:12
Это считается?) https://github.com/lightbend/config В ktor используется, по мне так офигенная вещь
Спасибо, заценим. Но лучше было бы что - то подобное https://github.com/akka/alpakka (вообще задаю такие вопросы, потому что в чате со скалистом нужна аргументация в пользу работы в джетбрейнс)

Yehor
20.06.2018
20:12:48
data class Bar(val foo: String?) { fun fooIsNotNull() : Boolean { return (foo != null) } } val bar: Bar = Bar(foo = "") if (bar.fooIsNotNull()) { val s : String = bar.foo // cant smart cast foo : String? to String } Народ, как я понял smart cast в котлине достаточно ограничен и анализировать что происходило в других функциях он не умеет, и пытаться что-то делать через "иммутабельность" это гиблое дело. Или я что-то упускаю. Печально.

YaAlex
20.06.2018
20:31:15
добрый вечер

посоветуйте годный курс по основам котлина

желательно на русском но не принципиально

Alexander
20.06.2018
20:31:56
Книга "Котлин в действии"

а потом на степике можно пройти курс по котлину

YaAlex
20.06.2018
20:33:53
спасибо за совет

Dmitriy
20.06.2018
21:17:43
Всем привет. Подскажите, из-за чего в спринге RestTemplate может не читать ответ в виде такого вот класса?: https://pastebin.com/ei7sPKNE Конкретно проблема в том, что игнорируется @JsonProperty("formatted_address"), если я переименовываю само поле в formatted_address, то всё работает. ObjectMapper объявлен вот так: https://pastebin.com/pR3aXrh7 Читается просто как val response = restTemplate.exchange(requestEntity, GooglePlaceDetailsResponse::class.java) Ошибка "бла-бла-бла nested exception is com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class com.escaria.tycoon.places.PlaceDetailsResult] value failed for JSON property formattedAddress due to missing (therefore NULL) value for creator parameter formattedAddress which is a non-nullable type бла-бла-бла"

Dmitriy
20.06.2018
21:23:15
А place_id читается?
нет, там такая же проблема

Google
Mi
20.06.2018
21:24:51
нет, там такая же проблема
Попробуй использовать field аннотацию https://kotlinlang.org/docs/reference/annotations.html @field:JsonProperty(...)

Mi
20.06.2018
21:27:37
Dmitriy
20.06.2018
21:36:22
А, @get:...?
нет, то же самое

в общем я разобрался, я нечаянно не ту аннотацию импортировал. кусок спринга в проект тащит org.codehaus.jackson, а правильные аннотации лежат в com.fasterxml.jackson. не ожидал такой засады

Руслан
21.06.2018
10:16:37
Dmitry Jemerov: "Project Centaur: Using Kotlin to turn IntelliJ IDEA into a server"

Интерсно, что это за Project Centaur. Неужели делают аналог Language Server?

Igor
21.06.2018
10:18:10
Dmitry Jemerov: "Project Centaur: Using Kotlin to turn IntelliJ IDEA into a server"
Этому серверу тоже нужно будет 16 гб минимум ??

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