
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

Sergey
02.03.2018
10:53:23

Mi
02.03.2018
11:26:30

Руслан
02.03.2018
11:27:58

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

Oleg
02.03.2018
12:35:57

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

Kirill
02.03.2018
14:44:40

Руслан
02.03.2018
14:45:34

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

Руслан
02.03.2018
14:50:03

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

Bogdan
02.03.2018
14:55:56

Жабра
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 - ну такое

Igor
02.03.2018
17:15:22

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

Andrew
02.03.2018
17:34:19


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

Жабра
02.03.2018
17:35:08

Andrew
02.03.2018
17:36:02
И тогда придётся разве что импорт добавить.


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

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

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.