
? animufag ?
15.08.2017
13:56:02
видимо также как и в фрагментах можешь сделать
где ctx экстеншн для контроллера = getActivity()

Va
15.08.2017
13:56:53
я у viewGroup могу взять контекст

? animufag ?
15.08.2017
13:56:59
только вот что делает овнер

Google

? animufag ?
15.08.2017
13:57:02
ну да)
ну то есть видимо ты разобрался в чём разница какой тип сделать овнером и я бы хотел послушать

Va
15.08.2017
14:01:07
короче, вот в чем задача
я хочу абстрактный контроллер, который в себя будет принимать AnkoComponent<Конкретный контроллер>, сам контроллер будет делать мне onCreateView
прелесть в том, что при описании лейаута, я могу обращаться к методам презентера, например, так:
но я не знаю, насколько это хорошая идея

? animufag ?
15.08.2017
14:05:05
я думаю (хотя и не придерживаюсь этого) что лучше всё таки делать эти компоненты отдельными классами.
удобно иногда сделать ad-hoc object:AncoComponent<> который будет дёргать методы, но код быстро разрастается и теряется его общая цель (текущего файла).

Va
15.08.2017
14:05:33
ну окей, сути дела не меняет )
переменная или отдельный класс, наследующийся от AnkoLayout
я про саму архитектуру, есть ли смысл сюда давать доступ к презентеру ?

? animufag ?
15.08.2017
14:09:30
ну так да, это и хотел сказать, что лучше проставить колбеки торчащие из этого класса (не вложенного в презентер). добавить какую-нибудь минимальную логику (мол setError(e: Error?) ну и показывать контейнер ошибки если не нул с её текстом).
иначе у тебя в презентере будет валяться этот ui и как бы мешать читать его
и ты его оттуда не вынесешь тк тебе нужен именно вложенный класс чтобы обращаться к методам

Va
15.08.2017
14:10:15
ну вот
только как бы это правильно и красиво заимплементить ? )
для этого и нужен owner, полагаю

Google

? animufag ?
15.08.2017
14:10:40
и конечно же буду рад послушать, зачем нужна эта owner: T
не обязательно от тебя

Va
15.08.2017
14:11:09
так смотри
AnkoContext<T> это просто интерфейс, который содержит какую-то логику и owner : T
соответственно, когда ты описываешь лейаут в скоупе AnkoContext, помимо рутинных verticalLayout { и прочая ересь}, у тебя есть возможность прямо там обратиться к owner. следовательно, если создавать AnkoContext<Fragment>, у тебя при описании в DSL будет доступ к Fragment

? animufag ?
15.08.2017
14:17:29
а ну да
просто могу обратиться к овнеру
хотя нигде этого раньше не делал
1я проблема которую вижу:
class BaseAncoPresenter<T: AncoComponent<BaseAncoPresenter<....
ну контроллер, а не презентер

Va
15.08.2017
14:30:30
да, вот сейчас сижу и думаю, как это решить )
если будут идеи — велкам
а в свифте есть Self как тип (

? animufag ?
15.08.2017
14:32:05
ну я костылил для BaseAncoAdapter и я там звздочку поставил (BaseAncoAdapter<BaseComponent<*»)

Quantum Harmonizer
15.08.2017
14:34:48

Va
15.08.2017
14:37:20
да, но, мб, как-то иначе можно придумать

Igor
15.08.2017
15:14:32
Можно ли как-то обойти необходимость использовать !! в таком коде? Не нашел ни одного примера нормального double-checked паттерна на котле

Google

Va
15.08.2017
15:15:21
node?.let { node ->
//код из if (node == null)
}
вместо if (node == null), разумеется

Igor
15.08.2017
15:15:37

Va
15.08.2017
15:16:39
последнее значение let — и есть возвращаемое значение
в случае если node таки null, то и вернется null
если вы захотите запровайдить что-то другое —
node?.let { node ->
//код из if (node == null)
} ?: что-то другое

Igor
15.08.2017
15:18:56
Угу, сделал. Выглядит, конечно, такое дело стремно
Но, все лучше чем отсутствие синхронизации

Va
15.08.2017
15:20:58
Я вас чуть-чуть обманул
?.let { делать, если НЕ null }

Igor
15.08.2017
15:21:42
Может стоит поработать на архитектрурой, что-бы без локовов обойтись?
private val nodes = ConcurrentHashMap<String, IMemCache>()
fun get(id: String): IMemCache =
nodes.getOrPut(id, { create(id) })

Va
15.08.2017
15:25:28
справедливое замечаение
но если очень надо, то вот

Dmitry
15.08.2017
15:26:13
вторая проверка внутри sync-блока потерялась

Va
15.08.2017
15:28:28
кстати, get можно сделать operator
Кстати, по поводу безобразия с контроллерами и анко, в итоге, пришел к выводу, что лучше сделать так

? animufag ?
15.08.2017
15:39:02
не знал про abstract val/var
в кондукторе одновременно сосуществуют презентер и контроллер? или твоё именование?

Va
15.08.2017
15:40:03
Controller кондуктора — это View, вместо фрагмента

Igor
15.08.2017
15:42:15
Хм, заметил, что вроде как можно вынести благодаря нормальным функциям инициализацию в отдельную функцию, можете глянуть - не накосячил ли?

Google

Igor
15.08.2017
15:42:22

Igor
15.08.2017
15:45:39
По гайдлайнам (в этом случае) все после = лучше перенести на новую строку (тем более код вылез за | )

Va
15.08.2017
15:45:54
и зачем T : Any ?
просто T

Igor
15.08.2017
15:51:42
Оно вроде как может
Да, пысы, setup предназначен в основном для того, чтобы в нем присваивать значение поля при его инициализации

Va
15.08.2017
15:52:52

Admin
ERROR: S client not available

Igor
15.08.2017
15:53:26
Мы ведь пихаем туда заведомо nullable, ибо T берется из accessor, например, и тогда на выхлопе он же и будет

Boris
15.08.2017
18:27:48
Не понял, а с каких пор старый добрый map.getOrPut() стал нехорош?

Igor
15.08.2017
18:34:50
Может я сейчас скажу что то в стиле Егора, но имхо synchronized надо уже объявлять deprecated или хотя бы в кодестайле idea подсвечивать.
Не должно его встречается в обычном коде (разве что фреймворках)

Va
15.08.2017
18:36:38

Boris
15.08.2017
18:39:22

Igor
15.08.2017
18:42:00
Эх запили ли бы в Kotlin STM

Quantum Harmonizer
15.08.2017
18:51:16

Igor
15.08.2017
18:52:37

Quantum Harmonizer
15.08.2017
18:52:58

Igor
15.08.2017
18:53:35

Google

Quantum Harmonizer
15.08.2017
18:55:33

Igor
15.08.2017
18:57:08
Тут точно надо развить мысль, ибо не понятно что именно не очень

Quantum Harmonizer
15.08.2017
18:57:58
defaultValue() вычисляется без блокировки

Denis
15.08.2017
18:59:18
как обновить элемент в MutableList?

Quantum Harmonizer
15.08.2017
18:59:33

Denis
15.08.2017
19:00:33
эм...set?
как найти index где находится этот элемент
с помощью предиката напр

Quantum Harmonizer
15.08.2017
19:01:20

Kirill
15.08.2017
19:01:56
withIndex().find {i, elem -> ... } можно

Quantum Harmonizer
15.08.2017
19:03:47

Igor
15.08.2017
19:03:55

Quantum Harmonizer
15.08.2017
19:04:04
да, если

Kirill
15.08.2017
19:04:41

Михаил
15.08.2017
19:23:02
никто не в курсе. почему классы прогрессий с стдлиб сделали закрытыми для расширения из клиентского кода?(

Va
15.08.2017
19:26:05
вам прям что-то такое надо, что экстеншнов не хватит ?

Михаил
15.08.2017
19:28:02
да) нужно иметь что-то в духе CompositeIntProgression, но проблема в том, что конструктор недоступен у прогрессий
просто хоть код копируй)

Quantum Harmonizer
15.08.2017
20:11:09

Михаил
15.08.2017
20:25:20

Quantum Harmonizer
15.08.2017
20:41:05

Михаил
15.08.2017
20:41:38
где ты раньше был :DDDD