@kotlin_lang

Страница 455 из 982
Gor
13.12.2017
14:52:32
воувоу) ладно, как только будет необходимость ) я еще топлевел функции не полностью осилил)
так а что там осиливать в топ-левел функциях? я все никак привыкнуть не могу что куча утилз методов не сгруппирована, и кажется все дико неудобным

Roman
13.12.2017
14:52:55
По той же причине мне не нравится применение rx для асинхронности. Появляется куча лишнего шума в коде для превращения асинхронной программы в реактивную и уже далее работа с ней как с реактивной.

Sergey
13.12.2017
14:53:03
ну мне пока имхо проще на rx все делать)

Google
Sergey
13.12.2017
14:53:08
особенно там где нужна параллельность

Sergey
13.12.2017
14:56:04
я правда с корутинами плотно не работал. не хватает по нему чтива структурированного типа "Reactive programming with RxJava"

Andrew
13.12.2017
14:56:16
видел PR с реализацией в K/N, который завёрнут с комментом "надо делать во взрослом котлине". сам жду -- как раз сейчас начал делать решение по обработке потока uint8, на ByteBuffer из NIO вязаться не хочу, ибо надеюсь на K/N соскочить в будущем.

Кстати о птичках. Про ULong/UInt/UShart/UByte все уже забыли? Никому не надо?

Я так просто вспомнил. На заре котлина что такое обсуждали.

Sergey
13.12.2017
14:56:54
Alexey
13.12.2017
14:57:44
Всем привет. Вопрос про котлиновский Int Когда это, например, аргумент конструктора, котлиновский Int превращается в джавовский примитив int. Можно ли заставить его не делать это, а стать Integer'ом? === Зачем? Я делаю парсинг JSON'ов, и у меня есть, например, вот такая штука >data class Paging(@JsonProperty(value = "PAGES") val pages: Int) Если в JSON'е поля PAGES нет, я хочу, чтобы Jackson попробовал впихнуть туда null, чтоб я поймал исключение (со всякими String это работает просто на ура). А вместо этого парсинг проходит без проблем, поле pages получается равным нулю

Roman
13.12.2017
14:57:44
Ну пока гиста хватит. Но репо - хорошая идея.

Int == int Int? == Integer

Alexey
13.12.2017
15:00:00
ну а при этом по понятным причинам List<Int> == List<Integer> это дало надежду на то, что есть волшебная аннотация, которая избавит меня от проблем

Andrew
13.12.2017
15:01:31
может, конечно, есть что-нибудь internal, но вообще эту магию (будет ли компилятор делать боксинг или нет) постарались максимально спрятать. вероятно, дабы оставить себе большее пространство для оптимизаций и подготовки к value types.

Google
Andrew
13.12.2017
15:01:51
но в целом я не видел возможности получить @NonNull java.lang.Integer

Alexey
13.12.2017
15:02:10
блин, грустно спасибо за ответы

Руслан
13.12.2017
15:02:33
jackson-kotlin-module используется?

Alexey
13.12.2017
15:02:39
агась

Руслан
13.12.2017
15:02:50
и он не падает тут?

если null и Int

Andrew
13.12.2017
15:03:17
сказал я и задумался -- а это, кто-нибудь пробовал использовать @NonNull / @Nullable из котлина? :D

Alexey
13.12.2017
15:03:26
не-а, не падает

Andrew
13.12.2017
15:05:29
может, кастомный десериалайзер? костыль, конечно, но зато в одном месте, а не по всему коду, которому нужен Int.

Artur
13.12.2017
15:06:02
Есть метод в JacksonMapper'е public <T> T readValue(String content, Class<T> valueType) вызываю mapper.readValue(data, List<Flowchart>::class.java) На что котлин при компиляции вежливо посылает kotlin only classes are allowed on the left Кто-нибудь знает как победить?

Руслан
13.12.2017
15:06:05
не-а, не падает
Ну да, прикольно data class Test(val value: Int) fun main(args: Array<String>) { val mapper = ObjectMapper().registerModule(KotlinModule()) println(mapper.readValue<Test>("""{"value":null}""")) }

Alexey
13.12.2017
15:06:10
вот, могу дать короткий тест кейс >data class Paging(@JsonProperty(value = "PAGES") val pages: Int) >@Test >public void testPagingEmpty() { >try { > Paging paging = objectMapper.readValue("{}", Paging.class); > System.out.println(paging.getPages()); > Assert.fail(); > } catch (IOException ignored) { > //all good. it should go here > } Парсинг проходит, тест проваливается, в выводе ожидаемо "0".

Andrew
13.12.2017
15:11:55
Я тут вот что нагуглил: https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html#FAIL_ON_NULL_FOR_PRIMITIVES С Jackson не работал, потому не могу утверждать, что ответ на вопрос, но мало ли :)

Alexey
13.12.2017
15:13:38
чёрт, решение надо было искать в самом джексоне. с этой штукой всё работает, как ожидаешь, спасибо большое

Andrew
13.12.2017
15:15:03
Из джавадока не сильно понятно, будет ли оно падать при отсутствующем значении, очевидно только при присутствующем null (хотя это ж JSON, в нём по-хорошему null вообще нету, так что по идее должно покрывать оба кейса).

Alexey
13.12.2017
15:15:40
все тесты только что загорелись зелёненьким)

Andrew
13.12.2017
15:16:19
Поздравляю :)

Roman
13.12.2017
15:17:07
Давай ты код накинешь на rx, а я его же на корутинах и посмотрим на количество шума
Вот rx код. val oa = Observable.just(0) val ob = Observable.just(0) val oc: Observable<Int> = Observable.zip<Int, Int, Int?oa, ob, BiFunction { a, b -> a + b })

Igor
13.12.2017
15:22:43
- Тройные кавычки. - Честно говоря, такой себе пример, just там вычисляются сразу на месте и идут сразу закомпличенные. - Его моего просто на котлин коллекции переписать

Google
Igor
13.12.2017
15:24:20
Или далее на константу (я оптимизировал код) val oc = 0

Sergey
13.12.2017
15:38:21
странный пример как-то)

хоть бы delay какой-то добавил или defer

Konstantine
13.12.2017
16:12:06
Имея объект clazz: Class<?> можем ли мы кастануть на этот класс другой объект? Есть некий метод clazz.cast(), но он возвращает Any.

Quantum Harmonizer
13.12.2017
16:13:49
Он возвращает Any, потому что у тебя Class<*>.

Igor
13.12.2017
16:16:49
Roman
13.12.2017
16:42:30
Ну это ведь просто пример, just самый простой способ создать Observable.

val oa = produce { send(0) } val ob = produce { send(0) } val oc = oa.zip(ob, Int::plus)
О как, в каналах тоже есть zip, вот это не знал.

Vadim
13.12.2017
16:45:08
Рисковано, но српошу) есть канал по RX?) Так решил убить себя морально))

Igor
13.12.2017
16:45:18
Vadim
13.12.2017
16:46:42
@MightySeal благодарю)

Roman
13.12.2017
16:48:37
Если напишешь - будет ?
Есть zip, но именно так не компилится. А вот так норм: val oc = oa.zip(ob, Unconfined, Int::plus)

Руслан
13.12.2017
16:49:22
transform = Int::plus

Roman
13.12.2017
16:49:47
Ага, так тоже пойдет.

Igor
13.12.2017
16:53:26
Есть zip, но именно так не компилится. А вот так норм: val oc = oa.zip(ob, Unconfined, Int::plus)
Ну топчик, пора обновляться (сидел на 0.19.1). В 0.20 добавил много полезных методов для каналов

Roman
13.12.2017
16:54:28
Правда там zip только для двух каналов. Для большего количества еще не написано.

Надо теперь разобраться, что именно там за zip. Это аналог rx.zip или rx.CombineLatest.

Sergey
13.12.2017
17:09:31
ну зипы разные можно сделать)

Roman
13.12.2017
17:10:57
Кстати пример на rx надо подправить, там не зип должен быть, а комбайн по условиям задачи. Я ошибся чутка.

Google
Roman
13.12.2017
17:11:16
Теперь вопрос еще как написать комбайн на корутинах... Щас попробую.

Sergey
13.12.2017
17:11:24
zip чаще всего используется как await нескольких событий

Osip
13.12.2017
17:43:24
Меня вот мучает вопрос. Если я друг за другом у коллекции использую filter, map, find и т.д. это всё превращается в итоге в один цикл или как? Извините, если вопрос совсем нубский

Roman
13.12.2017
17:44:30
Нет, каждая функция создаст новую коллекцию.

Anton
13.12.2017
17:44:59
Можешь юзать sequence

Roman
13.12.2017
17:44:59
А вот если использовать asSequence, то там не все так однозначно.

Osip
13.12.2017
17:46:22
О как. А в доках это описано? Я как-то упустил этот момент

Admin
ERROR: S client not available

Roman
13.12.2017
17:46:44
Конечно.

Более того, всегда можно посмотреть как оно работет внутри, исходники то открыты.

Osip
13.12.2017
17:47:24
Буду очень рад ссылке.

Dibro
13.12.2017
17:47:37
Буду очень рад ссылке.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map.html

Returns a list containing the results of applying the given transform function to each element in the original array.

Abbas
13.12.2017
17:47:42
в idea всегда можно посмотреть во что это генерится

Osip
13.12.2017
17:49:09
Ну я думал вдруг как-то эти инлайн функции по хитрому оптимизируются компилятором.

Alexander
13.12.2017
17:50:12
Декомпайл?

Dibro
13.12.2017
17:50:22
А как? Сколько нового узнаю
сверху Tools->Kotlin->Show Kotlin Bytecode

Osip
13.12.2017
17:50:36
А. Думал есть другой способ

Abbas
13.12.2017
17:50:46
а потом Decompile

Google
Osip
13.12.2017
17:50:47
Спасибо

Roman
13.12.2017
17:54:59
https://gist.github.com/romansl/6a050ccac6c7dcb7d624db8f0ebf913c

Alexander
13.12.2017
18:06:01
Нерабочая*

Жабра
13.12.2017
18:12:23


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

Очень дурацкий вопрос, но всё же

val fullName = text.split(" ") for (x in fullName) { x.toLowerCase() x[0].toUpperCase() }

Почему не меняется ничего??

Переделываю вводимую информацию

Имя Фамилия Отчество

Andrew
13.12.2017
20:09:56
String -- штука иммутабельная. Почитайте, что именно делает .toLowerCase().

Жабра
13.12.2017
20:10:43
А, всё понял. Туплю, извините.

Andrew
13.12.2017
20:11:46
Да ну что вы :)

Igor
13.12.2017
20:21:25
В JB говорят что пофиксили уже давно. Если у тебя это повторяется - переоткрой им багу https://youtrack.jetbrains.com/issue/KT-16891

Никита
13.12.2017
21:09:27
А ни у кого часом не завалялась ссылочка на .pdf Kotlin in Action? Желательно на русском языке, но и англ варианту буду рад)

или данного ресурса достаточно будет? https://try.kotl.in/

Anton
13.12.2017
21:11:57
тут собрались честные граждане которые покупают книги а не скачивают их незаконно!!!!!!

Никита
13.12.2017
21:12:37
Я бедный студент, у меня нет денег на книгу)

Да и заказывать из России долго :)

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