
Vladimir
20.06.2018
09:01:02

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

Vladimir
20.06.2018
09:03:20

Igor
20.06.2018
09:08:21

Google

Vladimir
20.06.2018
09:09:54

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
Нннннну может кто-то по каким-то причинам не хочет разворачивать ее в цикл?

Andrey
20.06.2018
09:47:44

Руслан
20.06.2018
09:48:01

Quantum Harmonizer
20.06.2018
09:49:19
? спасибо

Alexander
20.06.2018
09:49:28

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

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

Google

Alexander
20.06.2018
09:56:29

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

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
или заменить тип существующего

dimiii
20.06.2018
12:49:17


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

Виталий
20.06.2018
12:54:11

Google

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

Виталий
20.06.2018
13:02:00

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

Виталий
20.06.2018
13:04:32

Alexander
20.06.2018
13:05:17

Виталий
20.06.2018
13:06:04

dimiii
20.06.2018
13:07:07

Виталий
20.06.2018
13:07:50

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

Виталий
20.06.2018
13:09:03

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() }
это мне и нужно было

Dibro
20.06.2018
13:10:45

Alexander
20.06.2018
13:11:17

Виталий
20.06.2018
13:11:29

Алексей
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

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

Kirill
20.06.2018
15:34:27

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

Vladimir
20.06.2018
15:40:15

dimiii
20.06.2018
15:43:12

Kirill
20.06.2018
15:44:03

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 в котлине достаточно ограничен и анализировать что происходило в других функциях он не умеет, и пытаться что-то делать через "иммутабельность" это гиблое дело. Или я что-то упускаю. Печально.

Pavlo
20.06.2018
20:18:16

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 бла-бла-бла"

Mi
20.06.2018
21:23:01

Dmitriy
20.06.2018
21:23:15

Google

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

Dmitriy
20.06.2018
21:26:42

Mi
20.06.2018
21:27:37

Dmitriy
20.06.2018
21:36:22
в общем я разобрался, я нечаянно не ту аннотацию импортировал. кусок спринга в проект тащит 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