Size: a a a

Kotlin Community

2020 April 19

BV

Boris Vanin in Kotlin Community
Типа запуска, например
источник

AN

Alexander Nozik in Kotlin Community
Bogdan Panchenko
Виртуальные вызовы как раз оптимизируются
Ну там в некоторых случаях заинлайнит код, но при компиляции возможностей вообще говоря больше. Например когда композируются инлайны. Я при этом не говорю, что надо сейчас эти отпимизации делать. Вообще, я подумал. Когда будут отптимизации, тогда и добавлять можно.
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Nozik
Ну там в некоторых случаях заинлайнит код, но при компиляции возможностей вообще говоря больше. Например когда композируются инлайны. Я при этом не говорю, что надо сейчас эти отпимизации делать. Вообще, я подумал. Когда будут отптимизации, тогда и добавлять можно.
Да вообще много где можно много чего соптимизировать, но котлину сейчас явно не до того.)
источник

AN

Alexander Nozik in Kotlin Community
Quantum Harmonizer
Да вообще много где можно много чего соптимизировать, но котлину сейчас явно не до того.)
Согласен. Оптимизация композиции довольно мало где нужна. Я вот только одно место знаю.
источник

NY

Nikita Yatskivskiy in Kotlin Community
Ребят, зачастую в примерах, если функция должна просто запустить корутину и сразу вернуть результат, не дожидаясь выполнения этой корутины, то эту функцию пишут как экстеншен для CoroutineScope.

Так вот - если такая функция находится в другом классе, то приходится прибегать к with/apply, чтобы её вызвать. Как в таком случае вы поступаете - пишете экстеншен и используете with/apply или передаёте scope аргументом в эту функцию, вместо написания экстеншена? Есть вообще рекомендации, как правильно поступить в таком случае? 😅
источник

QH

Quantum Harmonizer in Kotlin Community
Nikita Yatskivskiy
Ребят, зачастую в примерах, если функция должна просто запустить корутину и сразу вернуть результат, не дожидаясь выполнения этой корутины, то эту функцию пишут как экстеншен для CoroutineScope.

Так вот - если такая функция находится в другом классе, то приходится прибегать к with/apply, чтобы её вызвать. Как в таком случае вы поступаете - пишете экстеншен и используете with/apply или передаёте scope аргументом в эту функцию, вместо написания экстеншена? Есть вообще рекомендации, как правильно поступить в таком случае? 😅
Импортить функцию, а не обджект/компанион
источник

AM

Andrew Mikhaylov in Kotlin Community
Nikita Yatskivskiy
Ребят, зачастую в примерах, если функция должна просто запустить корутину и сразу вернуть результат, не дожидаясь выполнения этой корутины, то эту функцию пишут как экстеншен для CoroutineScope.

Так вот - если такая функция находится в другом классе, то приходится прибегать к with/apply, чтобы её вызвать. Как в таком случае вы поступаете - пишете экстеншен и используете with/apply или передаёте scope аргументом в эту функцию, вместо написания экстеншена? Есть вообще рекомендации, как правильно поступить в таком случае? 😅
Я аргументами таскаю, остальные варианты выглядят кошмарненько
источник

NY

Nikita Yatskivskiy in Kotlin Community
Quantum Harmonizer
Импортить функцию, а не обджект/компанион
Не понял, если честно ((
источник

NY

Nikita Yatskivskiy in Kotlin Community
Andrew Mikhaylov
Я аргументами таскаю, остальные варианты выглядят кошмарненько
Тоже к такому выводу прихожу в итоге. Что вызовы через apply/with это «такое себе» )
источник

AN

Alexander Nozik in Kotlin Community
Nikita Yatskivskiy
Ребят, зачастую в примерах, если функция должна просто запустить корутину и сразу вернуть результат, не дожидаясь выполнения этой корутины, то эту функцию пишут как экстеншен для CoroutineScope.

Так вот - если такая функция находится в другом классе, то приходится прибегать к with/apply, чтобы её вызвать. Как в таком случае вы поступаете - пишете экстеншен и используете with/apply или передаёте scope аргументом в эту функцию, вместо написания экстеншена? Есть вообще рекомендации, как правильно поступить в таком случае? 😅
ставим лайк в KEEP-176
источник

AN

Alexander Nozik in Kotlin Community
Nikita Yatskivskiy
Тоже к такому выводу прихожу в итоге. Что вызовы через apply/with это «такое себе» )
Если у вас надо экстеншен вызвать, то context.run{ myObj.myFunction()} очень даже нормально.
источник

QH

Quantum Harmonizer in Kotlin Community
Nikita Yatskivskiy
Ребят, зачастую в примерах, если функция должна просто запустить корутину и сразу вернуть результат, не дожидаясь выполнения этой корутины, то эту функцию пишут как экстеншен для CoroutineScope.

Так вот - если такая функция находится в другом классе, то приходится прибегать к with/apply, чтобы её вызвать. Как в таком случае вы поступаете - пишете экстеншен и используете with/apply или передаёте scope аргументом в эту функцию, вместо написания экстеншена? Есть вообще рекомендации, как правильно поступить в таком случае? 😅
import obj

with(obj) { context.f() }

=>
import obj.f

context.f()
источник

AN

Alexander Nozik in Kotlin Community
Quantum Harmonizer
import obj

with(obj) { context.f() }

=>
import obj.f

context.f()
это только для объектов годится и я не уверен, что это даже для них хорошее решение.
источник

AN

Alexander Nozik in Kotlin Community
Вопрос был про типичный случай двух ресиверов
источник

NY

Nikita Yatskivskiy in Kotlin Community
Alexander Nozik
Если у вас надо экстеншен вызвать, то context.run{ myObj.myFunction()} очень даже нормально.
Не работает 😞
источник

NY

Nikita Yatskivskiy in Kotlin Community
(синтетический пример 😅)
источник

AN

Alexander Nozik in Kotlin Community
Nikita Yatskivskiy
Не работает 😞
А, там как раз порядок важен, надо местами scope и downloader помеять
источник

NY

Nikita Yatskivskiy in Kotlin Community
Гм, да, так работает
источник

NY

Nikita Yatskivskiy in Kotlin Community
А это не сильно чтение затрудняет? Мне кажется, передача явно аргументом попроще выглядит и читается полегче 🤔
источник

AN

Alexander Nozik in Kotlin Community
Этот порядок кстати самое проблемное место для KEEP-176
источник