@kotlin_lang

Страница 217 из 982
Руслан
26.06.2017
14:26:31
Не вызывайте статс бота, ну позязязя

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

Anna
26.06.2017
16:12:30
я бы от группы с таким названием ожидал бы обсуждение jvm
Я бы тоже. А ведь есть чат learn .java для джавы :) и вот он не популярнее котлина..

Они где-то на одном уровне

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

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

Антон
26.06.2017
16:29:57
пофикшены старые баги, добавлены новые
http://skillprogramming.com/images/pictuers/bug_line_415_to_420.gif

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
а то мне линт подсвечивает, что inline стоит делать только для лямбд
А нафига тебе просто inline? Hotspot все и так заинлайнит (или ART на android)

Михаил
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.

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

Михаил
26.06.2017
18:13:16
не final и с virtual by default
я понял, просто смысл такой рекоминдации

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
окей. ток я не вижу проблем сделать мок final класса того же
ок. Но всё же, по мне так final by default нарушает open-closed? Или если есть extensions, то язык может себе такое позволить?

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

Igor
26.06.2017
18:19:02
ок. Но всё же, по мне так final by default нарушает open-closed? Или если есть extensions, то язык может себе такое позволить?
http://3.bp.blogspot.com/-yQb2PmC63VY/VJmCl4aBI5I/AAAAAAAACPg/tZY6u4XSbtU/s1600/Why%2Bfavor%2Bcomposition%2Bover%2BInheritance%2Bin%2BJava.png

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

Adam
26.06.2017
18:19:44
http://3.bp.blogspot.com/-yQb2PmC63VY/VJmCl4aBI5I/AAAAAAAACPg/tZY6u4XSbtU/s1600/Why%2Bfavor%2Bcomposition%2Bover%2BInheritance%2Bin%2BJava.png
так с интерфейсами тоже беда. Главная их проблема в Kotlin не решена

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
допустим джошуа блох пишет что ставте везде файнал где только можно
После этого код на джаве стало читать намного удобнее, лол

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
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
После этого код на джаве стало читать намного удобнее, лол
А если еще везде Nullable/NotNullable аннотации расставить, то вообще ?

Михаил
26.06.2017
18:25:23
Из моего понимания SOLID-принципов, писать, полностью их придерживась, невозможно как минимум в Java, C# и Kotlin
это все таки больше вопрос к программисту. имхо в языках выше все для этого есть

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

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

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
Про это вкурсе https://kotlinlang.org/docs/reference/delegation.html ?
это костыли какие-то, нужно расширение интерфейсов задним числом

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

Igor
26.06.2017
18:32:43
это костыли какие-то, нужно расширение интерфейсов задним числом
Есть пример такого на JVM? (есть теория что рантайм не потянет без адских костылей (типа groovy :)))

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
структурная типизация в typescript, но здесь это не нужно
Ну в Swift это из рантайма object-c (частично динамического), а TS это вообще на грани добра и зла (JS). В JVM все строго в стат. языках.

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

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

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

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