@kotlin_lang

Страница 569 из 982
Yura
02.03.2018
09:41:09
Есть в котлине что-нибудь похожее на jshell?

Kirill
02.03.2018
09:42:28
kotlin repl в идее

Tools > Kotlin > Kotlin REPL

Google
Yura
02.03.2018
09:44:21
Кирилл, если у меня запущена идея, то я смогу набрать psvm.

По идее достаточно kotlinc-jvm запустить

Kirill
02.03.2018
09:46:23
По идее достаточно kotlinc-jvm запустить
а, ну ладно :) ты же не сказал, что тебе надо именно из терминала )

Sergey
02.03.2018
10:53:23
Не «выпилили», а «не сделали». Чтобы не делать лишние фичи в языке.
Не сделали, потому что никак. До 1.0 был оператор определения типа выражения (expr : type). Его правда удалили до 1.0

Mi
02.03.2018
11:26:30
Не «выпилили», а «не сделали». Чтобы не делать лишние фичи в языке.
Не, им действительно не хватило символов, по крайней мере так говорил Браслав, точнее не хотели делать какие-то другие символы, а именно ?: уже не получалось заимплеменитить

Руслан
02.03.2018
11:27:58
Не, им действительно не хватило символов, по крайней мере так говорил Браслав, точнее не хотели делать какие-то другие символы, а именно ?: уже не получалось заимплеменитить
когда только котлин вышел говорили что вот есть же if/else, ничем не хуже тернарного (даже лучше, вопрос на засыпку почему, джависты) и смысла нету в конструкции которая и так делает то что уже можно делать

Mi
02.03.2018
11:30:32
ну я видел это на каком-то неформальном митапе, где он честно в этом признавался

найти бы его

был бы список питерских митапов, где появлялся Бреслав

Sergey
02.03.2018
11:34:52
вроде это было когда он расказывал про то как дизайнить языке

в cs club

https://compsciclub.ru/courses/kotlin/2017-autumn/classes/

Google
Bogdan
02.03.2018
13:46:59
Vladislav
02.03.2018
14:26:02
смешной хлопчик ?
да смешного то там мало ) путаница с указателями, занятная модель классов, дженериков нет, исключений нет, всё надо ифами обставлять

Более того когда глядишь всякие сниппеты quick start разных либ, там они, дабы сократить размер примера, игнорят все коды ошибок. Соответственно горе разрабы на Go тупо копипастят эти сниппеты и ошибки не обрабатывают

Sergey
02.03.2018
14:31:39
ну на самом деле на go много че написано уже

Mi
02.03.2018
14:37:57
кто какие связки для тестирования использует?

Sergey
02.03.2018
14:38:46
junit + mockito

Anton
02.03.2018
14:42:06
spock

Abbas
02.03.2018
14:43:25
Руслан
02.03.2018
14:45:34
пользователей ))
Пользователи + YouTrack

Kirill
02.03.2018
14:45:53
Руслан
02.03.2018
14:47:15
Учитывая сколько тесты на проекты уровня идеи прогоняются, можно релизить маленькие изменения и смотреть логи)

Поменял класс - задеплоил, накатил - смотришь логи)

Kirill
02.03.2018
14:49:04
для меня было шоком, когда я узнал про hot class reload первые пару недель приходилось перекомпилировать всю идею на каждый чих :D

Alex
02.03.2018
14:49:05
junit & mockito

Kirill
02.03.2018
14:51:13
JVM или типо jrebel?
JVM я даже почти начал писать патч для dcevm, чтобы он с инлайн лямбдами котлина мог работать. но в итоге понял что мне и того что даёт хотспот достаточно

Руслан
02.03.2018
14:52:11
> я даже почти начал писать патч для dcevm То ли ты умный слишком, то ли времени много)

Надеюсь первое)

Google
Kirill
02.03.2018
14:53:40
ну патч — громко сказано. фикс чтобы через PR им заслать. > то ли времени много) я просто очень люблю начинать новые проекты :D

Руслан
02.03.2018
14:54:24
ну патч — громко сказано. фикс чтобы через PR им заслать. > то ли времени много) я просто очень люблю начинать новые проекты :D
О, я тоже люблю новые проекты начинать. Весь гитхаб в новых проектах, осталось их написать)))

Жабра
02.03.2018
16:41:31
Запустил обращение к бд внутри launch(UI) { ... }, приложение покрашилось с ошибкой что я обращаюсь к бд в UI потоке. Но ведь... Корутина...

Чего я не понимаю?

Message
02.03.2018
16:43:13
что за ошибка

Жабра
02.03.2018
16:43:45
IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

Quantum Harmonizer
02.03.2018
16:44:10
Message
02.03.2018
16:44:13
обращайся не в Ui

в чем проблема

Жабра
02.03.2018
16:44:54
Корутины не сделают волшебства и не угадают, в каком потоке запустить.
Ну, с обращением по сети угадывали всегда, думал и тут прокатит.

Message
02.03.2018
16:45:12
через дефолтный обращайся

Alexei
02.03.2018
16:45:20
думаю там асинк методы клиента были

Quantum Harmonizer
02.03.2018
16:46:02
Ну, с обращением по сети угадывали всегда, думал и тут прокатит.
не угадывали, где-то корутина суспендится явным образом

Жабра
02.03.2018
16:57:05
Можно ли назвать 100% костылем то, что я сейчас сделал object DatabaseWrapper, где дублировал все функции из бд, только засунул их в async? Чтобы можно было снаружи пускать в контексте UI и просто делать await()

Просто засовывать в runOnUiThread - ну такое

Жабра
02.03.2018
17:21:48
Он внешний. Когда загружается приложение, светится заставочная картинка, объект бд инициализируется.

Andrew
02.03.2018
17:34:19
Можно ли назвать 100% костылем то, что я сейчас сделал object DatabaseWrapper, где дублировал все функции из бд, только засунул их в async? Чтобы можно было снаружи пускать в контексте UI и просто делать await()
Вместо async(context) { ... }.await(), который у вас в итоге получается, советуется использовать withContext(context) { ... }. Возможно, с ним вам этот враппер покажется излишним.

Ivan
02.03.2018
17:34:34
Товарищи, а не подскажете, как в котлин можно анонимную реализацию интерфейса сделать если этот интерфейс тоже на котлин? в общем сыр-бор вот в чём: хочется не сильно много изменять вот такой код: private val cellValueProviders = listOf<CellValueProvider>( CellValueProvider { it.service.serviceIdentifier.toString() }, CellValueProvider { it.version.serviceVersion }, CellValueProvider { it.version.dtoVersion }, CellValueProvider { it.version.modelVersion }, CellValueProvider { it.version.dtoStreamVersion }, CellValueProvider { it.version.serializerVersion }) но при этом, если интерфейс на джаве: interface CellValueProvider { String getCellValue(ServiceInstance entity); } то всё ок, жмём ctrl+shift+alt+ k и всё ломается

Google
Ivan
02.03.2018
17:38:08
не, идея в том чтобы java интерфейс перевести на котлин

в смысле избавиться от java-кода

у Вас интерфейс остаётся

то как я написал выше - работает

Admin
ERROR: S client not available

Andrew
02.03.2018
17:38:59
Хочется избавиться вообще от интерфейса?

typealias CellValueProvider = (ServiceInstance) -> String

Ivan
02.03.2018
17:40:43
да, я думал про переписать на функцию, то тогда при вызове не останется имени функции что печально

уменьшает читаемость

Andrew
02.03.2018
17:41:02
Увы. Ждём inline class, который решит этот вопрос.

Ivan
02.03.2018
17:47:05
т.е. на котлин interface MyF { Integer superUnderstandableName(String s); } List<MyF> list = Arrays.asList(str -> 0, str -> 42); прямой аналогии нет, чтобы с сохранением superUnderstandableName

?

Andrew
02.03.2018
17:50:38
Нет, это работает за счёт SAM, который котлин поддерживает только в рамках интеропа с джавой.

Ivan
02.03.2018
17:56:21
блин, очень странно, неужели такой редкий кейс?

Quantum Harmonizer
02.03.2018
17:57:21
typealias MySuperUnderstandableName = (s: String) -> Int

когда есть функциональный тип, SAM нужен только для интеропа

Google
Ivan
02.03.2018
17:57:53
typealias MySuperUnderstandableName = (s: String) -> Int
чтобы с сохранением superUnderstandableName

Quantum Harmonizer
02.03.2018
17:58:06
так сохранилось же

Ivan
02.03.2018
17:58:13
при вызове

Quantum Harmonizer
02.03.2018
17:58:49
val superUnderstandableName: SuperUnderstandableName superUnderstandableName("")

Ivan
02.03.2018
18:05:40
val superUnderstandableName: SuperUnderstandableName superUnderstandableName("")
ну не, не равнозначно на фуфуфу джаве мой лист будет итерироваться вот так: for (MyF it : list) { it.superUnderstandableName("some string"); } на котлин: list.map {superUnderstandableName -> superUnderstandableName(e) } и это зависит только от добросовестности программиста, потому что вообще говоря лень заставит его написать вот так: list.map { it(e) } и тут хер разберёшься потом

ну вместо мап forEach

не суть

Kira
02.03.2018
18:46:33
А почему хер разберешь? Выдать листуу человеческое название и норм

Вот переменные типа a, b, evid_srv - дает много баттхерта, что с ними ни делай

Anton
02.03.2018
19:22:46
слушайте а в джаве/котлине примеси через интерфейсы с дефолтными методами это же по факту не примеси?

Kira
02.03.2018
19:24:06
Так миксины вроде про к готовой реализации помиксить что-то, не?

Anton
02.03.2018
19:25:39
ну как это в котлине например сделать кроме как через интерфейс?

Quantum Harmonizer
02.03.2018
19:28:04
ну как это в котлине например сделать кроме как через интерфейс?
Что именно нужно сделать, какую задачу решить?

Anton
02.03.2018
19:29:23
да никакую не нужно. рассказываю как было: я читал спеку по Дарту и там нашел примеси. тк я писал только на джаве и котлине я полез читать что это за штука такая. нашел статью дорфмана и еще пару где пишут что в 8 джаве через vitrual extension methods можно по сути реализовывать примеси

потом я залез на вики и там написано Typically, the mixin will export the desired functionality to a child class, without creating a rigid, single "is a" relationship.

но разве наследование интерфейса не создает "is a" сооотношение?

Quantum Harmonizer
02.03.2018
19:30:57
потом я залез на вики и там написано Typically, the mixin will export the desired functionality to a child class, without creating a rigid, single "is a" relationship.
Есть разное понимание трейтов или миксинов (это вроде разные понятия). То, что тупо копипастит методы тебе в класс — бесполезная фигота.

Anton
02.03.2018
19:31:41
окей а в скале тогда есть трейты - это тоже самое что интерфейсы в джаве например?

Mixins encourage code reuse and can be used to avoid the inheritance ambiguity that multiple inheritance can cause[1] (the "diamond problem"), or to work around lack of support for multiple inheritance in a language.

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