@kotlin_lang

Страница 842 из 982
Mikhail
31.08.2018
09:15:39
у такого паттерн матчинга не хватает destructive declaration

я как-то на Java писал паттерн матчинг с destructive declaration

Igor
31.08.2018
09:16:37
у такого паттерн матчинга не хватает destructive declaration
Увы. Согласен. Но можно похимичить и сделать комбинатоpы чеpез and на left/right или a/b/c.

Mikhail
31.08.2018
09:16:50
но тогда придется избавиться от when и написать свой

Google
Alexander
31.08.2018
09:17:47
Не могу понять как правильно написать. Подскажите. Допустим вот такой код: class Repository { suspend fun news() : List<News> { ... } } IDE ругается на Redundant suspend modifier Как правильно писать? Ведь этот код будет вызываться внутри корутины
Тут какой-то треп пошел, не могу понять, ответил кто-то или нет. Из корутин можно вызывать обычные функции. Обратно нельзя. Иногда имеет смысл специально вешать suspend на функцию, которая не суспендится, чтобы пометить ее как длительно выполняющуюся и запретить вызывать не из корутин.

Igor
31.08.2018
09:19:08
https://gist.github.com/komigor/fe668171bcf0c83369de5218a090cf16 Вот тут с вынесением, и ИМХО, выглядит очень опpятно, и понятно, что это именно стейт

Quantum Harmonizer
31.08.2018
09:21:57
Alexander
31.08.2018
09:22:33
С чего это? Она работает асинхронно. Про быстроту вроде никто ничего не говорил

Andrew
31.08.2018
09:24:59
Почему это? Я длительную функцию хочу выполнять асинхронно в рабочем потоке
Ты же не знаешь, из какого контекста твою саспенд-функцию дернут. Если это окажется, к примеру, контекст UI-потока, будет грустненько. withContext же почти всегда дешевый в 0.25.0

Quantum Harmonizer
31.08.2018
09:26:04
С чего это? Она работает асинхронно. Про быстроту вроде никто ничего не говорил
Вопрос в том, асинхронно чему. Если есть основной пул воркеров, который должен быть очень отзывчивым, такую задачу хотелось бы увести на другой пул.

Alexander
31.08.2018
09:27:39
Ну это уже вопрос того, кто вызывает (на оба прошлых поста). Важно что я не хочу ее вызывать на main thread. Понятно, что у меня есть разные корутины. Для справки, я не работаю с бэкэндом, так что у меня специфиа немного другая.

Но собственно та же проблема возникает с любыми функциями. Без чтения документации нельзя узнать, для чего она предназначена.

Google
Quantum Harmonizer
31.08.2018
09:29:07
В мобилке я бы тоже не хотел блокировать computations-пул вводом-выводом, например.

Alexander
31.08.2018
09:29:20
И не в мобилке тоже :)

Смысл в том, что suspend помечены функции, которые не гарантируют, что они вернутся сразу

А прична может быть разная.

Andrew
31.08.2018
09:29:51
Ну это уже вопрос того, кто вызывает (на оба прошлых поста). Важно что я не хочу ее вызывать на main thread. Понятно, что у меня есть разные корутины. Для справки, я не работаю с бэкэндом, так что у меня специфиа немного другая.
Ну не везде "это уже вопрос того, кто вызывает" — хорошее решение, благо корутины позволяют легко инкапсулировать свитч контекста вовнутрь функции, дабы наружная сторона об этом не задумывалась.

А прична может быть разная.
Согласен. Серебрянной пули, само собой, нет :)

Alexander
31.08.2018
09:31:38
В принципе согласен, Когда есть возможность, лучше все засунуть внутрь. Я просто периодически мечу методы в интерфейсах как suspend даже если реализация не использует suspend вызовы, чтобы заранее размечать то, что надо думать откуда вызывать.

Igor
31.08.2018
09:41:35
Igor
31.08.2018
09:41:48
Не pучками же писать :)

Можно посмотpеть кстати в стоpону кодогенеpации arrow-kt, может получится в ее pамках сделать. (Пока не смотpел этот pаздел вообще).

Mikhail
31.08.2018
09:47:25
Не pучками же писать :)
кстати, а почему Parcelize не используешь?

Igor
31.08.2018
09:47:59
кстати, а почему Parcelize не используешь?
Не слышал об этой штуке + сомневаюсь, что в моем случае мне сгенеpится код хоть под один data-класс, ибо там слишком много кастомных обеpок.

Igor
31.08.2018
09:51:48
и по copy менять не получится

Mikhail
31.08.2018
09:52:46
а разве оптика с этим не справляется?

она ведь для того и нужна

Maxim
31.08.2018
09:52:53
а почему бы тогда не использовать sealed class?
+, в него можно было бы еще и кучу визуальных параметров запихнуть

Google
AleksanderSh
31.08.2018
10:30:48
Покажи кусочки кода, мб что-то придумаем.
Вот, есть класс на java. В нем несколько методов для вывода и форматирования логов. public class LogUtils { public static void logd(String message) { Log.d("Locating", message); } В proguard я пишу assumenosideeffects правило и в нем перечисляю нужные методы, который мне в релизе не нужны: -assumenosideeffects class packagename.LogUtils { public static *** logd(...); } В итоге из релизной апк вызовы этих методов удаляются, как и сам класс за ненадобностью.

Если LogUtils на джаве написан, то все ок, а если котлин, то не вырезается. Пробовал: -assumenosideeffects class packagename.LogUtils {…} -assumenosideeffects class packagename.LogUtilsKt {…} -assumenosideeffects class packagename.LogUtils.Companion {...}

Andrew
31.08.2018
10:34:16
А в Show Kotlin Bytecode не заглядывал?

AleksanderSh
31.08.2018
10:34:24
Igor
31.08.2018
10:40:45
А там уже публичный API есть?
Вроде нет, но есть сорцы ?

Vladimir
31.08.2018
10:41:25
Вроде нет, но есть сорцы ?
Сорцы сегодня одни, завтра другие ?‍♂️

Ivan
31.08.2018
11:30:30
Поясните по инлайн классам. Не является ли недоступность типа инлайн класса в рантайме таким же недостатком, как type erasure у дженериков? Как там с аннотациями, они будут видны в рантайме?

Mikhail
31.08.2018
11:33:14
Поясните по инлайн классам. Не является ли недоступность типа инлайн класса в рантайме таким же недостатком, как type erasure у дженериков? Как там с аннотациями, они будут видны в рантайме?
а когда тебе вдруг инлайн класс понадобится в рантайме? Это ведь сделано для того чтобы использовать тайпчекер как тесты по спецификации без накладных расходов

Ivan
31.08.2018
11:46:27
а когда тебе вдруг инлайн класс понадобится в рантайме? Это ведь сделано для того чтобы использовать тайпчекер как тесты по спецификации без накладных расходов
Конкретный пример не смогу привести, для каких-нибудь фреймворков с рантайм-магией. Сейчас дженерики в Джаве работают только как тесты по спецификации, и это их крупный недостаток.

Bogdan
31.08.2018
11:51:32
Поясните по инлайн классам. Не является ли недоступность типа инлайн класса в рантайме таким же недостатком, как type erasure у дженериков? Как там с аннотациями, они будут видны в рантайме?
К инлайн классам стоит смотреть как на тайпалясы, только более прокачаными. Они как раз и нужны для того чтобы в рантайме типа небыло, а для компилятора и программиста был

OlegKrikun
31.08.2018
11:53:05
Котоны, а кто нить может мне объяснить почему котлин плагин 1.3m2 настройчиво советует вот в таком примере: val counter = list.map { it.someInt }.sum() конвертировать list в сиквенс?

окай, сиквенс тоже умеет сум, вопрос снят

OlegKrikun
31.08.2018
12:04:20
ооо, спасибо

Bogdan
31.08.2018
12:05:43
окай, сиквенс тоже умеет сум, вопрос снят
Сиквенс обычно нужен когда у тебя цепочка операций

OlegKrikun
31.08.2018
12:06:10
это я понимать

Google
Bogdan
31.08.2018
12:11:50
Инлайн классы еще эксперементальны

Ivan
31.08.2018
12:16:00
Что аннотации ?
Хотелось бы иметь к ним доступ хотя бы через плагины для компилятора, а еще лучше в рантайме

Bogdan
31.08.2018
12:28:53
Ну можно создать доп. Объект, но тогда смысл в инлайне теряется

Ivan
31.08.2018
12:33:10
А как по вашему можно узнать данную инфу в рантайме?
Заинлайнить аннотацию на поле или параметр, которые будут созданы в результате инлайнинга класса, например

Admin
ERROR: S client not available

Bogdan
31.08.2018
12:40:09
Заинлайнить аннотацию на поле или параметр, которые будут созданы в результате инлайнинга класса, например
Так аннотации хранятся в Классе которого пофакту не будет, а поле это регистер, стек где хранятся числа, зделайте инлайн класс и посмотрите байткод

Mikhail
31.08.2018
12:42:28
Речь наверное об аннотировании в месте использования класса

Bogdan
31.08.2018
12:47:13
Зайдём з другой стороны, зачем вам аннотации + инлайн классы да еще в рантайме ?

+
^

Ivan
31.08.2018
12:52:08
Зайдём з другой стороны, зачем вам аннотации + инлайн классы да еще в рантайме ?
Для хранения метаинформации, доступной фреймворкам и процессорам аннотаций, чтобы фича не была отделена от всего остального языка. Не хотелось бы выбирать между возможностью навесить аннотацию типа @SerializedName или любую другую и возможностью пользоваться инлайн-классами.

Ivan
31.08.2018
13:04:16
То есть спринг
Спринг в том числе. Аннотации и процессоры аннотаций уже есть в Java, может это и было ошибкой, но от этого уже никуда не деться. И в Котлине было приложено много усилий, чтобы это все продолжило работать.

Mikhail
31.08.2018
13:06:44
да вроде в дискуссии о KEEP на гитхабе уже обсудили это и решили запретить

Google
Bogdan
31.08.2018
13:08:56
да вроде в дискуссии о KEEP на гитхабе уже обсудили это и решили запретить
На то есть причины, нужныдополниьельные объекты + классы для них. Смысл в инлайн классе потерян, и даже будет хуже

Mikhail
31.08.2018
13:26:13
и по copy менять не получится
Кстати, призмы не смотрел? Это ж как раз для этого штуки, как я помню

Igor
31.08.2018
13:56:52
Кстати, призмы не смотрел? Это ж как раз для этого штуки, как я помню
Так я и использую, только не пpизмы, а линзы. Зачем пpизмы нужны я как не пытался, так и не понял.

Sergey
31.08.2018
15:16:35
0.9 kotlin native релизят

тегнули уже релиз

Dibro
31.08.2018
15:44:34
0.9 kotlin native релизят
прикольно, новый грейдл плагин и dsl

Andrew
31.08.2018
15:47:12
И заново вкрученный в него cinterop

Boris
31.08.2018
16:11:17
И заново вкрученный в него cinterop
А про новый интероп я ничего не слышал

Andrew
31.08.2018
16:11:45
А про новый интероп я ничего не слышал
Интероп старый, просто в новом Gradle-плагине его не было до последнего момента. Оно, конечно, решается одним Exec-таском, но приятнее из коробки иметь.

Boris
31.08.2018
16:12:01
Аа, ты про плагин

Bogdan
31.08.2018
16:49:55
Возник такой вопрос, если мне нужен касс\интерфейс c именнем Unit, обозначаеть целосность, объеденения. Как лучше назвать ? Или Можно обманывать котлин ? (имя пакета не хочется указывать)

Andrew
31.08.2018
16:54:49
Возник такой вопрос, если мне нужен касс\интерфейс c именнем Unit, обозначаеть целосность, объеденения. Как лучше назвать ? Или Можно обманывать котлин ? (имя пакета не хочется указывать)
> Или Можно обманывать котлин ? Как обычно, тут может помочь либо qualified name с именем пакета, либо переимеованный импорт, если бы это был сторонний класс. Других вариантов я не знаю. Если это твой собственный класс — таки придумай другое имя, не мучай себя и тех, кто после тебя это читать будет. > Как лучше назвать ? Во-первых, "целосность, объеденения" — это слишком уж обширно, во-вторых, это слегка мимо темы чата вопрос :)

Quantum Harmonizer
31.08.2018
16:55:43
мб Union?

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