
Руслан
26.06.2017
14:26:31
Не вызывайте статс бота, ну позязязя

Sergey
26.06.2017
14:27:49
Вообще не знал, что это за зверь

Anna
26.06.2017
16:12:30
Они где-то на одном уровне

Google

Igor
26.06.2017
16:27:21
Кто то обновлялся уже на версию котлина 1.1.3 в андроид проекте ? без проблем ?

Михаил
26.06.2017
16:28:40
пофикшены старые баги, добавлены новые

Антон
26.06.2017
16:29:57

Igor
26.06.2017
16:31:16
у меня после обновления на 1.1.3 такая вот ерунда
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> kotlin.jvm.internal.FunctionReference.<init>(ILjava/lang/Object;)V
и я не могу понят что это

Михаил
26.06.2017
17:26:37
а как из котлина делать нативные вызовы?

Sergey
26.06.2017
17:28:00
Вместо native

Михаил
26.06.2017
17:29:18
external, спасибо)

Михаил
26.06.2017
17:48:04
а как работает inline для функций? там просто тело функции вставляется в место, где эта функция вызывается?

Михаил
26.06.2017
17:48:56
да
в байткоде даже этой функции не будет

Михаил
26.06.2017
17:49:59
а это работает, когда я внутри функции вызываю другую приватную inline функцию из этого же класса?

Google

Михаил
26.06.2017
17:50:17
почему нет)

Михаил
26.06.2017
17:50:49
а то мне линт подсвечивает, что inline стоит делать только для лямбд

Igor
26.06.2017
17:51:29

Михаил
26.06.2017
17:51:32
он правильно подсвечивает) инлайн это не волшебная пилюля оптимизации

Михаил
26.06.2017
17:52:07

Михаил
26.06.2017
17:53:21
а чем метод не угодил?)

Михаил
26.06.2017
17:55:32
ну так зачем иметь в apk лишние private методы, каждый из которых используется в одном месте? может лучше их сразу заинлайнить?

jacoder
26.06.2017
17:58:53
Разве на этапе сборки они сами не инлайнятся?

Михаил
26.06.2017
18:01:29

Igor
26.06.2017
18:01:44
Разве на этапе сборки они сами не инлайнятся?
Нет, хотя вроде в android можно proguard частично настроить для этого.
Но если мы говорим про android, то это “экономия на спичках”, ведь какой-нибудь google play analytics + admob уже ~15k методов

jacoder
26.06.2017
18:02:07
Вот тут хорошее объяснение
https://stackoverflow.com/questions/24923040/do-modern-java-compilers-jvm-inline-functions-methods-which-are-called-exactly-f
TL;DR it should in most cases
В прогуарде вроде был флаг

Adam
26.06.2017
18:06:03
Кстати, закрытость классов для расширения по умолчанию не нарушает принцип Open-closed SOLID?

Igor
26.06.2017
18:06:56
Наоборот же, юзай extension-functions для расширения или delegate-methods/classes для композиции

jacoder
26.06.2017
18:07:58
В каком смысле закрытость? Экстендс нарушает как раз.
А проброс своих реализаций поведения в класс - нет

Adam
26.06.2017
18:08:22

jacoder
26.06.2017
18:08:58
Значит не нарушает
Это вы случаем не про final classes by default?

Adam
26.06.2017
18:09:35
А расширения нужны интерфейсам, а не классам, как в Swift. Это решает expression problem, без решения которой трудно следовать Interface segregation

Google

Adam
26.06.2017
18:09:47
Для тестирования, например, рекомендуется делать классы открытыми для наследования, то есть не объявлять их final.

Михаил
26.06.2017
18:11:41
для мокито эта проблема неактуальна

Adam
26.06.2017
18:12:05
зачем?
не final и с virtual by default

Михаил
26.06.2017
18:13:16

Adam
26.06.2017
18:13:39

Михаил
26.06.2017
18:13:55
стабы в смысле?

Adam
26.06.2017
18:14:38
стабы в смысле?
сразу видно, проблемой тестирования не интересовались. Рекомендуется на всех конференциях и во всенх книгах называть их просто фейки, туда входят и стабы, и другое.

jacoder
26.06.2017
18:14:43
Так, приватный метод не инлайнит на этапе сборки aar

Михаил
26.06.2017
18:15:22
стаб мб не получится сделать, но зачем если есть мок)

Adam
26.06.2017
18:17:30
То есть концепция наследования по умолчанию считается нежелательной и повторное использование класса ограничивается

Igor
26.06.2017
18:19:02

Konstantin
26.06.2017
18:19:04

jacoder
26.06.2017
18:19:06
С прогуардом тоже не инлайнит.

Adam
26.06.2017
18:19:44
extension интерфейсов виртуальными методами ведь не поддерживается?

Михаил
26.06.2017
18:20:56

Google

Konstantin
26.06.2017
18:21:28
Вообще, ocp связан с такими вещами как предусловия и постусловия и это имеет отношение к делу если ты таки собрался наследоваться. При этом если нельзя наследоваться — значит нельзя by design

jacoder
26.06.2017
18:21:44
Про проблему интерфейсов. Вы про то, что нет default методов?

Konstantin
26.06.2017
18:22:05

Adam
26.06.2017
18:22:12

Igor
26.06.2017
18:22:22
Может быть кто-то подскажет: как в IntelliJDEA создать проект с gradle + kotlin + web-пакетом с META-INF и WEB-INF, так чтобы больше ничего вручную не приходилось создавать?

Admin
ERROR: S client not available

Konstantin
26.06.2017
18:22:34

Михаил
26.06.2017
18:22:44

Adam
26.06.2017
18:23:54
Из моего понимания SOLID-принципов, писать, полностью их придерживась, невозможно как минимум в Java, C# и Kotlin

jacoder
26.06.2017
18:23:57
Ничего, val введут и заживем

Igor
26.06.2017
18:24:56

Михаил
26.06.2017
18:25:23

Adam
26.06.2017
18:27:19
это все таки больше вопрос к программисту. имхо в языках выше все для этого есть
Написал я класс. Заимплементил интерфейс какой-нибудь. Затем мне нужно часть публичных методов этого класса в соответствии с 'реализации должны зависеть от абстракций' использовать в друго классе. Если я этот метод (или группу) методов не заимплементил при создании класса, даже, если эти методы там есть, подставить объект не получится.

Konstantin
26.06.2017
18:27:36
Нууу, тут просто какая штука, solid про оо, в то время как сейчас идёт все более сильно влияние функциональщины

Михаил
26.06.2017
18:29:57

Adam
26.06.2017
18:30:23

Михаил
26.06.2017
18:30:44
особенно в котлине
by delegate

Igor
26.06.2017
18:30:55

Adam
26.06.2017
18:31:32

Google

Михаил
26.06.2017
18:31:53
что значит расширение интерфейсов задним числом?

Igor
26.06.2017
18:32:43

Adam
26.06.2017
18:33:26
если класс уже реализует всё, что нужно, но просто не хватает ему этих интерфесов в сигнатуре класса, то должен быть способ просто добавить, группировать эти интрефейсы, не переписывая сигнатуру класса
что-то типа extension, только абстрактными методами в Swift есть
структурная типизация в typescript, но здесь это не нужно

Михаил
26.06.2017
18:36:57
и бегать по всему проекту гадать откуда у итератора взялся метод print() ?)

jacoder
26.06.2017
18:37:40
Так сэкстеншнами то же самое

Михаил
26.06.2017
18:37:42
почему тогда просто не добавить новый метод в интерфейс?

jacoder
26.06.2017
18:38:22
Новый интетфейс, наследоваться и все.
Зачем придумывать

Михаил
26.06.2017
18:39:15
Так сэкстеншнами то же самое
ну это имхо костыль, который нужен всего для двух целей. чтобы расширить класс к которй невозможно модифицировать (библиотечный например) и чтобы немного красивее некоторые места можно было написать

Igor
26.06.2017
18:40:10

Михаил
26.06.2017
18:50:04

Наиль
26.06.2017
19:01:21
что-то типа extension, только абстрактными методами в Swift есть
Это очень удобная вещь, которой в котлине не хватает.
(Я про extension в swift - это бывшие "категории" в objectivec)
Действительно, часто бывает, что класс обладает реализацией всех методов, которые декларирует интерфейс. И хочется этот класс использовать напрямую, не создавая для него обертку(обертка если наследование закрыто)
В целом extensions в swift мне нравятся больше.

Adam
26.06.2017
19:01:49

Наиль
26.06.2017
19:02:31
Для этого надо прогать на языке, чтобы прочувствовать суть на своей шкуре :)

Dmitry
26.06.2017
20:14:09
кто-нибудь видел в котлине у Sequence аналог scan из rx?