Size: a a a

2019 October 17

E🎸

El Mariachi 🎸 in Kotlin Start
Andrey Kshukin
Просто когда интерфейс внутри класса читать сложнее, хотя дело привычка наверное)
И будет у тебя MyFragmentListener какой-нить... а потом ты решишь отрефакторить и переименовать свой класс фрагмента... вряд ли интерфейс переименуется автоматом
источник

E🎸

El Mariachi 🎸 in Kotlin Start
ищи потом потом по своим файлам, какой слушатель у тебя для какого класса....
источник

AK

Andrey Kshukin in Kotlin Start
El Mariachi 🎸
ищи потом потом по своим файлам, какой слушатель у тебя для какого класса....
Обычно структурно все складывается) Не буду спорить) Просто интересно почему они решили так сделать)
И еще вопрос. Для c# были правила написания кода например интерфейсы начинались с IMyInterface публичные поля с верхнего регистра приватные с _ и нижнего регистра. Если есть ссылочка на оформление кода в котлине. Можете скинуть?
источник

AK

Andrey Kshukin in Kotlin Start
https://kotlinlang.org/docs/reference/coding-conventions.html хотя нашел уже) В любом случае спасибо)
источник
2019 October 18

E🎸

El Mariachi 🎸 in Kotlin Start
Есть ли принципиальная разница, писать в классе для проперти без бэкингфилда геттер через приватную функцию или через лямбду?
val someval: T
get() = { ... }()
.VS.
val someval: T
get() = func()
private fun func(): T {...}
первое вроде гораздо лаконичнее, но меня смущает, что это вроде не одно и то же?
источник

E🎸

El Mariachi 🎸 in Kotlin Start
первое заинлайнится - а второе нет?
источник

AL

Alexander Levin in Kotlin Start
El Mariachi 🎸
Есть ли принципиальная разница, писать в классе для проперти без бэкингфилда геттер через приватную функцию или через лямбду?
val someval: T
get() = { ... }()
.VS.
val someval: T
get() = func()
private fun func(): T {...}
первое вроде гораздо лаконичнее, но меня смущает, что это вроде не одно и то же?
Оба выглядят плохо, как по мне. Мои предложения (которые относительно сходятся с докой - https://kotlinlang.org/docs/reference/properties.html):

1. Если однострочник - напишите через =:
val notEmpty get() = size != 0
2. Многострочник - просто открывайте фигурные скобки и пишите

val notEmpty
   get() {
       return size != 0
   }

3. Многострочник, но вы очень любите лямбда-синтаксис - делайте run

val notEmpty get() = run {
   size != 0
}
источник

E🎸

El Mariachi 🎸 in Kotlin Start
Alexander Levin
Оба выглядят плохо, как по мне. Мои предложения (которые относительно сходятся с докой - https://kotlinlang.org/docs/reference/properties.html):

1. Если однострочник - напишите через =:
val notEmpty get() = size != 0
2. Многострочник - просто открывайте фигурные скобки и пишите

val notEmpty
   get() {
       return size != 0
   }

3. Многострочник, но вы очень любите лямбда-синтаксис - делайте run

val notEmpty get() = run {
   size != 0
}
спасибо
источник

F

FOX in Kotlin Start
Объясните, почему тут вылетает ошибка?
https://pastebin.com/KB866q60

java.util.ConcurrentModificationException
источник

AL

Alexander Levin in Kotlin Start
FOX
Объясните, почему тут вылетает ошибка?
https://pastebin.com/KB866q60

java.util.ConcurrentModificationException
Сходу выглядит, что вы в куче потоков пишете в один ArrayList, т.е. структуру, которая предназначена для однопоточного исполнения. Если причина в этом, то могу предложить заменить структуру на её конкурентный вариант.
источник

F

FOX in Kotlin Start
Alexander Levin
Сходу выглядит, что вы в куче потоков пишете в один ArrayList, т.е. структуру, которая предназначена для однопоточного исполнения. Если причина в этом, то могу предложить заменить структуру на её конкурентный вариант.
Да. так и есть. Создается поток по числу элементов. А на что можно заменить? Я пробовал делать synchronized - но не помогло
источник

AL

Alexander Levin in Kotlin Start
FOX
Да. так и есть. Создается поток по числу элементов. А на что можно заменить? Я пробовал делать synchronized - но не помогло
Попробуйте CopyOnWriteArrayList
источник

F

FOX in Kotlin Start
Alexander Levin
Попробуйте CopyOnWriteArrayList
можно пример?
источник

E🎸

El Mariachi 🎸 in Kotlin Start
Alexander Levin
Сходу выглядит, что вы в куче потоков пишете в один ArrayList, т.е. структуру, которая предназначена для однопоточного исполнения. Если причина в этом, то могу предложить заменить структуру на её конкурентный вариант.
а просто mutex.withLock { empList.add(empDataHashMap) } не поможет разве ?
источник

F

FOX in Kotlin Start
Alexander Levin
Попробуйте CopyOnWriteArrayList
Все! Разобрался. спасибо за наводку!
источник

F

FOX in Kotlin Start
CopyOnWriteArrayList - не знал что есть такой класс, что это потокобезопасный List
источник

F

FOX in Kotlin Start
Alexander Levin
Попробуйте CopyOnWriteArrayList
Кстати, почему-то  выигрыша от потоков нет(
источник

F

FOX in Kotlin Start
El Mariachi 🎸
а просто mutex.withLock { empList.add(empDataHashMap) } не поможет разве ?
Это же корутины, а они по-моему не тоже самое что Thread. Могу ошибаться конечно
источник

E🎸

El Mariachi 🎸 in Kotlin Start
FOX
Кстати, почему-то  выигрыша от потоков нет(
еще бы, COW же
источник

F

FOX in Kotlin Start
El Mariachi 🎸
еще бы, COW же
И как решить это?
источник