https://kotlinlang.org logo
#russian
Title
# russian
l

lewik

04/05/2019, 1:22 PM
Что можно сделать с публичным методом-рашширением, определенном в классе?
Copy code
class Test{
    val map = mapOf(
    	1 to "a",
        2 to "b"
    )
    fun Int.switch() = map[1] ?: "c"
}

fun main() {
    1.switch() ///???
    /////
}
g

ghedeon

04/05/2019, 1:25 PM
Copy code
with (test){ 1.switch() }
но вообще странный подход "что можно сделать с тем-то". Отталкиваться лучше от задачи.
l

lewik

04/05/2019, 1:26 PM
Да, я разделяю этот подход. Мне просто интересно.
А следующий вопрос вас наверно добьет
А зачем такое может понадобиться? 🙂
Подменять test?
g

ghedeon

04/05/2019, 1:27 PM
в класс можно внедрить зависимости, элементарно
l

lewik

04/05/2019, 1:27 PM
не понял
with (target){ dep.inject() }
Так чтоли?
g

ghedeon

04/05/2019, 1:29 PM
есть у тебя
String.toDate()
глобальный. Завтра захочешь фенси форматтер какой-то использовать, может логер еще внутри. Твоя публичная функция очень быстро станет некрасивой, со всеми этими параметрами.
а так обернешь в какой-то
Mapper
, который это все спрячет
l

lewik

04/05/2019, 1:30 PM
И как мне в toDate воткнуть зависимость?
Я не понял
g

ghedeon

04/05/2019, 1:31 PM
зависимости будут в маппере,
toDate()
останется чистым
l

lewik

04/05/2019, 1:31 PM
А ... как я их запихну то?
g

ghedeon

04/05/2019, 1:31 PM
но у него будет контекст мапера
l

lewik

04/05/2019, 1:31 PM
И надо будет везде писать with ?
g

ghedeon

04/05/2019, 1:31 PM
это да, козявочка
l

lewik

04/05/2019, 1:32 PM
with (mapper){ int.toDate() }
Ну... такое
Просто у меня как раз описанный вами пример ))) И я вот такой toDate с зависимостями... надоело уже писать
Но
with (mapper){ int.toDate() }
точно не то
g

ghedeon

04/05/2019, 1:33 PM
можно на ты. Ну, да, на любителя.. Как и
CoroutineScope.foo()
в котором еще меньше практического смысла.
l

lewik

04/05/2019, 1:33 PM
Наверно, можно через синглтон прокинуть в маппер то, что хочется - но я тогда потом не поменяю этот синглтон. Плохо.
g

ghedeon

04/05/2019, 1:34 PM
удоли!111 про синглтон и никому не скажем.
l

lewik

04/05/2019, 1:35 PM
Неее
Отталкиваться лучше от задачи.
Если в биз-логике прибито - синглтон - пиши синглтон.
Но... вот что я скажу
Да, тут рисково, что это может поменяться.
g

ghedeon

04/05/2019, 1:44 PM
может веткой ошибся, не понял причем тут type erasure. Если хочешь это обсудить, то лучше создать отдельный тред 😉
l

lewik

04/05/2019, 1:45 PM
type erasure ?
Это где?
g

ghedeon

04/05/2019, 1:46 PM
хм, теперь у меня уже другой сниппет открылся)
до этого там были typealias
1.doMap(CustomMapper())
, не, это чет совсем уже непотребство какое-то
l

lewik

04/05/2019, 1:48 PM
Это план Б
g

ghedeon

04/05/2019, 1:48 PM
лучше уже олдскульный
mapper.doMap(1)
l

lewik

04/05/2019, 1:48 PM
Что если маппер нужен "не тот"
Тогда цепочкой не попреобразуешь
Я хочу цепочкой
1.doMap().someProp.doOtherMap()
g

ghedeon

04/05/2019, 1:51 PM
¯\_(ツ)_/¯
l

lewik

04/05/2019, 1:51 PM
Мне чего колется - я вот так воткну, я ж не выну потом
А, фиги. Нету у меня глобального defaultMapper. Только через инъекцию.
Все, спасибо. Я воткну через делегата
g

ghedeon

04/05/2019, 1:53 PM
удачи знатно воткнуть!
l

lewik

04/05/2019, 1:53 PM
Не ты погоди
Помоему эпично получается
Только как кастомный использовать не пойму
Божечки мои, почему ж я логирование так не делал?
Твой with помог
g

ghedeon

04/05/2019, 2:08 PM
о, ты один из тех троих, кто нашел применение Implementation by Delegation
l

lewik

04/05/2019, 2:09 PM
Не ну шикарно же
Хотя да, я не совсем понимаю накой этот делегат
g

ghedeon

04/05/2019, 2:10 PM
можно не писать
with
да, но я не знаю, если бы я хотел, чтобы мой Repository торчал наружу как Mapper.
но плюс за креативность)
l

lewik

04/05/2019, 2:11 PM
А репозитори не подойдет
Сто пудов он не один. А интерфейс - один
А вот логи - хорошо подойдут.
Ну и моя возня с кэшем (в моей логике он один изначально)
a

Alexjok

04/05/2019, 9:44 PM
Блин, а какой кейс практический из этого? Что-то понять не могу.(
l

lewik

04/11/2019, 10:07 AM
Множественное наследование. Писать удобненько.
2 Views