@kotlin_lang

Страница 90 из 982
Sergey
31.03.2017
10:37:25
но спринг не умеет еще такого, поэтому all-open в любом случае будет в плагинах

Igor
31.03.2017
10:38:32
делегация классов помогла?
Ты мне так и не ответил, на уточняющий вопрос. Это мне нужно для каждого интерфейса вручную заводить дополнительный класс-заглушка?

Google
Igor
31.03.2017
10:39:40
Тут кстати говорят что она ломает инкрементную компиляцию в Android https://developer.android.com/studio/build/optimize-your-build.html#annotation_processors Как это с Kotlin работает, вообще не понятно (хотя у Kotlin свои проблемы с AP).

Михаил
31.03.2017
10:41:26
правильно говорят)

Quantum Harmonizer
31.03.2017
10:41:58
у меня PermissionDispatcher вроде не сломал)

Руслан
31.03.2017
10:46:47
Ты мне так и не ответил, на уточняющий вопрос. Это мне нужно для каждого интерфейса вручную заводить дополнительный класс-заглушка?
Ну вот что-то такое, если у тебя большие интерфейсы, а нужно застабить только один метод, может быть полезно fun main(args: Array<String>) { val stub = MyServiceStub(DefaultMyService()) stub.doWork() // stubDoWork } interface MyService { fun doWork() fun init() fun destroy() } class DefaultMyService : MyService { override fun init() = println("init") override fun doWork() = println("doWork") override fun destroy() = println("destroy") } class MyServiceStub(val myService: MyService): MyService by myService { override fun doWork() = println("stubDoWork") }

Igor
31.03.2017
10:47:21
у меня PermissionDispatcher вроде не сломал)
Ну почему это ни сделать руками (риторический вопрос)? Программировать это же интересно ?

Quantum Harmonizer
31.03.2017
10:47:50
Ну почему это ни сделать руками (риторический вопрос)? Программировать это же интересно ?
Большинство кода, который я пишу — это скучно. И уж тем более runtime permissions :)

Igor
31.03.2017
10:54:08
Ну вот что-то такое, если у тебя большие интерфейсы, а нужно застабить только один метод, может быть полезно fun main(args: Array<String>) { val stub = MyServiceStub(DefaultMyService()) stub.doWork() // stubDoWork } interface MyService { fun doWork() fun init() fun destroy() } class DefaultMyService : MyService { override fun init() = println("init") override fun doWork() = println("doWork") override fun destroy() = println("destroy") } class MyServiceStub(val myService: MyService): MyService by myService { override fun doWork() = println("stubDoWork") }
OK, это я понял. Слегка менее удобно, когда они НЕ большие, а их много (если жить по sol I d). Ну это наша Android тема, с заморочка про архитектура. (вот я постепенно и перехожу на функциональные типы (A) -> B - не нужно плодить интерфейсы, легко писать реализации)

Митко Соловец?
31.03.2017
10:54:52
ребят, а давно в Котлине new выпилили?

Igor
31.03.2017
10:55:11
Sergey
31.03.2017
10:55:11
Google
Митко Соловец?
31.03.2017
10:55:34
Руслан
31.03.2017
10:55:37
Хорошо сказано ?

Igor
31.03.2017
10:56:58
Ты просто object : Type делаешь?
Нет, сейчас как ты делаю, но мне не кажется это идеалом (плодить эти MyServiceStub).

Руслан
31.03.2017
11:05:55
Нет, сейчас как ты делаю, но мне не кажется это идеалом (плодить эти MyServiceStub).
Я б сказал бы что лучше вообще пользоваться мокито

Igor
31.03.2017
11:08:10
Я б сказал бы что лучше вообще пользоваться мокито
А разработчики Kotlin так не считают (тот же Жемеров об этом говорил). Кто знает, какой для них самый идиоматичный способ тестировать Kotlin код?

Sergey
31.03.2017
11:08:36
junit

Sergey
31.03.2017
11:09:21
Dmitry Jemerov [JB] используйте тот, который вам нравится. мы сами используем просто junit

Руслан
31.03.2017
11:09:56
Igor
31.03.2017
11:10:08
Когда Жемеров был против мокито?
Пару раз говорил в интервью/конференция, особенно когда его спрашивают "почему классы не открытые по умолчанию".

Руслан
31.03.2017
11:10:13
одно другого не отменяет

Igor
31.03.2017
11:11:11
одно другого не отменяет
Он не против (наверное), просто говорил что они его не юзают и у них нет проблем с final. Короче надо глянуть сорцы Kotlin ?

Руслан
31.03.2017
11:11:45
Ну я его юзаю, и у меня нет проблем с final)

Sergey
31.03.2017
11:12:26
у них data driven тесты в сорсах, им там моки не нужны

Андрей
31.03.2017
12:30:17
Пару раз говорил в интервью/конференция, особенно когда его спрашивают "почему классы не открытые по умолчанию".
Классы не открыты по умолчанию - это от дядюшки Боба в Clean Code. Мокито это совершенно не мешает, если следовать другим заветам - зависимости в виде интерфейсов, а не конкретных реализаций. И вот эти интерфейсы и мокаешь. Для тех, кто не любит юзать интерфейсы, были придуманы разные PowerMock-и. Да и тот же Мокито уже давно умеет мокать финальные классы.

Михаил
31.03.2017
13:46:56
В мокита не так давно можно стало файнал мокать

Андрей
31.03.2017
15:29:24
Почему не так давно? Пол года прошло уже.

Михаил
31.03.2017
18:13:58
не только у дядушки боба про закрытые классы. в эффектив джаве тоже

можно ли такой метод на котлине без анчекед каста написать?

Google
Михаил
31.03.2017
18:15:29
https://pastebin.com/hN3eNpyD

Boris
31.03.2017
18:23:30
stubEntityClass.createInstance()

Михаил
31.03.2017
18:31:23
?

на refied дженерике?

Boris
31.03.2017
18:32:25
как вариант, да

inline fun <reified K> create():K = K::class.createInstance() типа того

или так fun <T> makeStub(stubEntityClass: Class<T>): T = when (stubEntityClass) { UserRes::class -> UserRes() UserLoginReq::class -> UserLoginReq() UserInfoDto::class -> UserInfoDto() MenuItemHolder::class -> MenuItemHolder() else -> throw IllegalArgumentException("There is no stub for class") } as T

Boris
31.03.2017
18:38:42
конечно будет, но только в одном месте %-)

https://pastebin.com/kGFg6DA5

Roman
31.03.2017
19:20:16
при сборке андроид проекта получаю в логах: Could not connect to kotlin daemon. Using fallback strategy.

как это пофиксить?

Roman
31.03.2017
19:20:43
и еще вот это Could not perform non-incremental compilation with Kotlin compile daemon, non-incremental compilation in fallback mode will be performed

Tony
31.03.2017
20:13:35
а котлин как-то генерит айдишник объекта? если нет, то как я могу создать автоинкрементирующийся айдишник?

Tony
31.03.2017
20:16:23
Айдишник какого объекта?
класса, который сам и написал

Михаил
31.03.2017
20:17:25
Сделай компанион обжект со счетчиком

И инкременть его когда надо

Ну это и в джаве можно

Tony
31.03.2017
20:19:57
то есть в инициализаторе?

Google
Tony
31.03.2017
20:20:05
я не очень понимаю



а вы пишете на котлине на кэмл кейзе или снейк?

Sergey
31.03.2017
20:34:31
кэмл канеш

это ж не питон)

Quantum Harmonizer
31.03.2017
20:37:16
private companion object { private val counter = AtomicInteger() } val id: Int init { id = counter.incrementAndGet() } будет служить тебе верой и правдой до первого перезапуска приложения)

Quantum Harmonizer
31.03.2017
20:39:42
вынеси val в property

Tony
31.03.2017
20:40:53
Admin
ERROR: S client not available

Quantum Harmonizer
31.03.2017
20:41:24
Нет, тогда можно будет лешко плодить пользователей с одинаковыми id.

Tony
31.03.2017
20:41:35
хорошо

что делать?

в питоне @property

Quantum Harmonizer
31.03.2017
20:42:13
что делать?
разместить это свойство в теле класса

Tony
31.03.2017
20:42:56
хм

надо тогда геттер создать для него

в котлине точно есть что-то крутое для этого

Google
Quantum Harmonizer
31.03.2017
20:43:38
надо тогда геттер создать для него
для него уже создан геттер, ёпта

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

Tony
31.03.2017
20:44:32
Quantum Harmonizer
31.03.2017
20:44:57
ты к тому, что data class?
Я к тому, что понятие свойства в Котлине уже включает в себя геттер.

Tony
31.03.2017
20:45:07
бля

какой же ахуенный язык

Sergey
31.03.2017
20:45:30
?

Quantum Harmonizer
31.03.2017
20:45:44
val x: Int эквивалентно private int x; public int getX() { return x; }

Sergey
31.03.2017
20:45:49
я дико тащусь с генераторов секвенций

Quantum Harmonizer
31.03.2017
20:46:20
я дико тащусь с генераторов секвенций
Можно пример? Я так и не применил.

Sergey
31.03.2017
20:49:28
Можно пример? Я так и не применил.
https://github.com/kotlin-projects/kotlin-euler/blob/master/src/main/kotlin/euler/Problem_0012.kt#L10 ну вот на примере этих задачек

Sergey
31.03.2017
20:53:02
единственное чего иногда не хватает в плагине котлина, так это просмотра выведенных типов

щас хоть начало показывать тип переменных, а то совсем недавно это было проблемой

Tony
31.03.2017
20:57:44
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

так я делаю для интов

Sergey
31.03.2017
20:58:05
тебе прям примитивы нужны?

Tony
31.03.2017
20:58:06
а как сделать также для моих Customer

Sergey
31.03.2017
20:58:18
listOf

Tony
31.03.2017
20:58:52
listOf
а лист это случаем не свзный список?

Sergey
31.03.2017
20:59:53
ArrayList

Tony
31.03.2017
21:05:49
val testArray: ArrayList<Customer> = ArrayList(10)

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