@kotlin_lang

Страница 512 из 982
Nikolay
26.01.2018
17:22:23
и все хорошо работает

Sergey
26.01.2018
17:27:08
можно еще интерфейс сделать с дефолтным методом)

Nikolay
26.01.2018
17:27:33
ну для sealed классов это врядли подойдет, или?

Andrew
26.01.2018
17:29:11
Да мне хватает вот такого: object OutUsbOpen: OutputCommand() { override fun toString(): String = "${javaClass.simpleName}()" } Просто вот такого -- строк 50, что смущает.

Google
Nikolay
26.01.2018
17:29:55
ну это весьма странно выглядит, как по мне

Andrew
26.01.2018
17:30:50
Альтернативы?

Часть команд с параметрами, потому обычные data class-ы с автосгенерированными equals / hashCode / toString, для команд без параметров других вариантов не вижу -- для object не надо определять сравнение вообще, он и так один, остаётся только toString() -- но как я уже отметил, это косметика (логи приятнее), а не решение задачи, так что с этим можно жить.

Nikolay
26.01.2018
17:34:38
Альтернативы?
ну я написал альтернативу

Andrew
26.01.2018
17:35:54
ну я написал альтернативу
А почему object с toString по вашему мнению -- странно, а class со всеми тремя методами -- нет?

Nikolay
26.01.2018
17:38:38
может я и ошибаюсь, и это только дело вкуса. Вот проверил документацию - https://kotlinlang.org/docs/reference/sealed-classes.html - они сами тут object используют

а зачем toString() переопределять у него?

так что сорри весли ввел в заблуждение

я просто написал как сам использую ?

Andrew
26.01.2018
17:41:41
Andrew Mikhaylov: ... .toString() выдаёт qualified name и instance id, которые выглядят так себе -- хотелось бы видеть MyClass() вместо com.example.company.project.package.MyClass@601d768d.

Nikolay
26.01.2018
17:42:19
ну это я увидел, но это чисто чтобы красиво? или какаято функциональная ценность? ? (мало ли, может вы в текстовом поле выводите это)

Andrew
26.01.2018
17:44:23
Логи, косметика, я ж писал.

В общем, я суть уловил, вариантов нет, но проблемой не является, так что всё хорошо :)

Google
Vladimir
26.01.2018
18:28:17
Что мешает для этих 50 object'ов сделать один общий родитель с equals/hashCode/toString?

Andrew
26.01.2018
19:46:07
Что мешает для этих 50 object'ов сделать один общий родитель с equals/hashCode/toString?
Прекрасный вопрос, никто же не мешает определить toString у базового sealed class -- object-ы подхватят его, а data class-ы переопределят сами. Спасибо, не сообразил, что базовый sealed class может быть не просто маркером.

Cube
27.01.2018
09:28:47
пытаюсь в onCreate проверить if (savedInstanceState==null)

не работает

override fun onCreate(savedInstanceState: Bundle?)

Gleb
27.01.2018
09:35:25
Что не работает?

Смарт каст?

Quantum Harmonizer
27.01.2018
09:35:56
-> @android_ru или @kotlin_mobile

Alexei
27.01.2018
09:39:40
товарищи! Кто-то пробывал юзать kotlin - native, как впечатления? стоит ли пробывать?

Boris
27.01.2018
09:54:31
товарищи! Кто-то пробывал юзать kotlin - native, как впечатления? стоит ли пробывать?
Да, я пробовал, очень хорошие впечатления, но нужно понимать, что это ещё не релиз

Timur
27.01.2018
10:06:01
Ребят, а coroutin(ы) предпочтительнее использовать, чем RxJava? Или от чего это зависит

Quantum Harmonizer
27.01.2018
10:06:13
от задачи

Timur
27.01.2018
10:07:19
от задачи
а есть статейка или информация в каком случае, что лучше применять?

Quantum Harmonizer
27.01.2018
10:08:55
а есть статейка или информация в каком случае, что лучше применять?
Корутины удобны для пследовательного асинхронного кода. Rx — для прыгания между разными потоками. Но это моё мнение, и какой-то чёткой грани, вероятно, нет.

Quantum Harmonizer
27.01.2018
10:16:40
с каналами и акторами можно тоже вполне прыгать)
Вообще да. Хм, наверное, чисто дело привычки.

Andrew
27.01.2018
10:23:30
а есть статейка или информация в каком случае, что лучше применять?
https://github.com/Kotlin/kotlinx.coroutines/blob/master/reactive/coroutines-guide-reactive.md Сравнение рх и каналов -- полезный раздел.

Boris
27.01.2018
10:25:01
как мы тут выяснили, сейчас у каналов не до конца проработана работа с распараллеливанием задач

Google
Timur
27.01.2018
10:27:22
@fogone  Просто я хотел бы узнать насколько корутины лучше\есть преимущества перед RxJava. Для сетевых запросов\БД и последущей обработки результа

Скинули статью, надеюсь она ответит на вопросы

Andrew
27.01.2018
10:32:01
Да, это всё ещё не до конца стабилизированное и не покрывающее все юзкейсы апи, у рх есть уйма операторов, которых нету у каналов, но каналы прекрасны тем, что они о корутинах с вытекающим из этого способом применения.

Для кого-то это минус, для кого-то -- плюс.

Boris
27.01.2018
10:33:42
да, сейчас у рх намного более развита инфраструктура, но я думаю у каналов со временем тоже всё появится

из за корутин каналы намного проще устроены чем обсервабл, использовать их намного приятнее из за этого. И писать расширения тоже

Igor
27.01.2018
11:01:46
Да, это всё ещё не до конца стабилизированное и не покрывающее все юзкейсы апи, у рх есть уйма операторов, которых нету у каналов, но каналы прекрасны тем, что они о корутинах с вытекающим из этого способом применения.
> рх есть уйма операторов, которых нету у каналов Хм, вроде как раз и хотели уйти от запоминания 100500 операторв (по словам Романа), а оно вон как. Еще и Вортон пытается напилить RX-на-корутина.

Andrew
27.01.2018
11:09:49
> рх есть уйма операторов, которых нету у каналов Хм, вроде как раз и хотели уйти от запоминания 100500 операторв (по словам Романа), а оно вон как. Еще и Вортон пытается напилить RX-на-корутина.
Вы ж недавно пытались (и Вортон в слаке с кем-то пытался) сочинить debounce вроде бы. 100500 -- перебор, конечно, но пока и вот таких важных нет. Касательно непосредственно 100500 -- потому я и говорю, что для кого-то это плюс, для кого-то минус. Я тут в чате припоминаю мнение, что эти ваши корутины -- императивщина и ненужно, ибо есть реактивные стримы :)

Igor
27.01.2018
11:15:53
А когда пытаются императивщину натянуть на рх - то получаются просто адовые спагетти. Честно не понимаю зачем из каналов делать рх, когда можно просто взять рх (если такая любой везде его натягивать) + расширения от корутин.

Igor
27.01.2018
11:28:46
А в новых версиях implicit преобразований к нужным типам еще не завозили случаем?

Igor
27.01.2018
11:29:48
Да ладно, удобно было бы. Не сильно люблю implicit-ы, но в некоторых случаях код они сокращают и упрощают :)

Igor
27.01.2018
12:09:35
А в новых версиях implicit преобразований к нужным типам еще не завозили случаем?
Да лан, там их вон в скале частично убирают тк даже Мартин признал их ошибкой

Igor
27.01.2018
12:11:14
Да лан, там их вон в скале частично убирают тк даже Мартин признал их ошибкой
Черт знает. Мне исключительно понравилось их использовать. Исчезла куча адских вызовов мапперов, тонну параметров не нужно передавать в конструктор, ну и так далее.

Igor
27.01.2018
12:15:32
Черт знает. Мне исключительно понравилось их использовать. Исчезла куча адских вызовов мапперов, тонну параметров не нужно передавать в конструктор, ну и так далее.
> тонну параметров не нужно передавать в конструктор А как тут помогает имлисит-преобразования или просто про имлиситы? (это да удобно местами)

Igor
27.01.2018
12:19:10
> тонну параметров не нужно передавать в конструктор А как тут помогает имлисит-преобразования или просто про имлиситы? (это да удобно местами)
Именно тут – просто имплиситы. А вот для избегания кучи преобразования типов – преобразования как-раз помогают (ща прям кейс закину, в котором было бы удобно :))

Мне очень нравятся extension функции для таких штук, но постоянно юзать даже экстеншны подбешивает :) https://gist.github.com/komigor/bf53fbfbff292cf863ee2e153e4d5516

Boris
27.01.2018
13:01:31
имплиситы это дорога в ад, вот скала часто для бигдаты используется и я там раз поймал такую проблему, что мплиситное преобразование добавляло 2 часа работы 4 часовой джобе, т.е. программист просто не заметил, что в одном месте применялось преобразование в очень нагруженном месте

хорошо хоть идея подчеркивает их, но всё равно есть грань, где явное всегда лучше неявного

имплиситные параметры я тоже никогда не понимал, т.е. с одной стороны они могут сэкономить 5 минут на пробрасывание, но с другой забрать час на поиск источника

Google
Artem
27.01.2018
13:19:54
Kirill
27.01.2018
13:21:50
Оу. А о чём это вы вообще? Можно какой-то линк на эту тему?
https://docs.scala-lang.org/tour/implicit-parameters.html https://stackoverflow.com/questions/10375633/understanding-implicit-in-scala

Artem
27.01.2018
13:24:39
Благодарю

Bogdan
27.01.2018
15:09:50
кто пробывал kotlin\native и Qt?

Quantum Harmonizer
27.01.2018
15:10:53
кто пробывал kotlin\native и Qt?
https://t.me/kotlin_lang/51128

Bogdan
27.01.2018
15:13:26
ud1
27.01.2018
17:22:15
Привет всем, у меня вопрос по котлину. Хочу такой код: var oldFiles : MutableMap<Path, ChangeType>? = null; synchronized(this) { if (files.isNotEmpty()) { oldFiles = files; files = HashMap() } } if (oldFiles != null) process(oldFiles) Т.е. смысл в том, что я в отдельном потоке проверяю, что некая переменная класса типа MutableMap не пуста, и если так, то заменяю ее на пустую, а для певоначальной вне блока synchronized уже выполняю метод обработки. Но это не компилируется из-за того, что в отличие от жавы в котлине это кложура: Error:(31, 25) Kotlin: Smart cast to 'MutableMap<Path, DirObserver.ChangeType>' is impossible, because 'oldFiles' is a local variable that is captured by a changing closure Как быть?

Igor
27.01.2018
17:47:54
Из synchronized можно вернуть значение

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/synchronized.html

ud1
27.01.2018
17:54:33
Спасибо

Igor
28.01.2018
13:10:18
насколько это generic-hell?) abstract class ViperFragment<Model, Event, V: IView<Model, Event>, R: BaseRouter<*, *, *>, out P: ViperPresenter<Model, Event, V, R»: Fragment()

Sergey
28.01.2018
15:20:44
какие есть варианты для лимитов на ресурсы с корутинами и без? к примеру есть апишка, к которой можно посылать только скажем 4 одновременных запроса, к нам из веба пришло 2 клиента, которым нужно по 10 запросов к этой апишке сделать первое что приходит в голову это отдельный тред пул на 4 потока или семафора

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

я возможно не в ту сторону копаю даже?

Igor
28.01.2018
16:00:45
какие есть варианты для лимитов на ресурсы с корутинами и без? к примеру есть апишка, к которой можно посылать только скажем 4 одновременных запроса, к нам из веба пришло 2 клиента, которым нужно по 10 запросов к этой апишке сделать первое что приходит в голову это отдельный тред пул на 4 потока или семафора
Так можно создать ограниченный-пул и конвертнуть его в dispatcher. В .NET кстати есть класс SemaphoreSlim как раз для работы с async/await, он позволяет усыплять корутины сверх лимита. Наверное можно похожее и в котлин-корутины завести, хотя не понятно чем это лучше кастомного диспачера.

Vladimir
28.01.2018
16:04:39
Тред пул не поможет, т.к. корутины на то и корутины, чтобы выполняться в большом количестве на маленьком количестве потоков. Недавно столкнулся с такой же задачей и не нашёл в kotlinx.coroutines ничего подходящего. Уже начал писать велосипед поверх Mutex.

Google
l0rem
28.01.2018
16:09:57
Добрый вечер Недавно загорелся идеей изучить Kotlin для воплощения в жизнь одной из идей. На данный момент работал лишь с Python (речь про ООП), Jav'у не трогал и особого желания читать доки по этому языку ради изучения другого не имею. Пока не совсем понял пару вещей - Таки стоит ли мне смотреть в сторону Java (просто куда ни плюнь все гении пишут про байткод и прочие прелести конвертации в Java)? Если конечным продуктом является приложение для Android (а потом и IOS, но тут Swift выглядит более надёжно), то не стоит ли мне начать сразу с изучения работы с AndroidStudio? Заранее спасибо.

l0rem
28.01.2018
16:21:36
Какова цель? Разработка под Android? Тогда Kotlin — лучший вариант, но знание Java всё же помогает, т. к. на ней написан и сам Android, и горы библиотек. Работа в Android Studio не имеет каких-то решительных отличий от работы в PyCharm, например.
Нет, я не очень горю желанием разрабатывать под Android на постоянной основе. Просто у меня есть проект, который требует взаимодействия с пользователем. Тк я не работал в сфере моб. разработки я выбрал телеграм и запилил бота на питоне. По мере развития проекта стало понятно, что нужно свое приложение (желательно не белый экран с парой кнопок, а красивое и приятное средство взаимодействия). + я лично хочу потрогать Kotlin и научиться работать с ним, как с наиболее прогрессивным языком из Java-семьи. Python классный, но уже приелся.

Bogdan
28.01.2018
16:23:39
поможет

Sergey
28.01.2018
16:24:55
Тред пул не поможет, т.к. корутины на то и корутины, чтобы выполняться в большом количестве на маленьком количестве потоков. Недавно столкнулся с такой же задачей и не нашёл в kotlinx.coroutines ничего подходящего. Уже начал писать велосипед поверх Mutex.
решил так, делаю SendChannel, пускаю N корутин которые его обрабатывают и постоянно запущены там где нужно использование делаю что-то в духе val results = produce<String> { for (i in 0..10) { channel.send(Job(i.toString(), this.channel)) } }

дебажить правда это то еще веселье

дебагер совсем не умеет работать

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