Size: a a a

Kotlin Community

2020 March 19

K

Kopusha in Kotlin Community
переиспользовать код не нужно, просто как маркер, что "вот эти 5 строчек делают это". Обычно ставят какой-то range comment в таких случаях с begin/end. Подумал, может что-то есть в языке
источник

t

trashkalmar in Kotlin Community
Kopusha
экзотический вопрос, есть какой-то сахар, чтобы обернуть блок кода в скобки с именем? Как альтернатива комментарию
ex:
"пояснение" {
...
...
}
(знаю, что можно объявить локальную функцию и тут же ее вызвать)
inline operator fun String.invoke(block: () -> Unit) {}
Как-то так?
источник

VP

Vladimir Petrakovich in Kotlin Community
Kopusha
переиспользовать код не нужно, просто как маркер, что "вот эти 5 строчек делают это". Обычно ставят какой-то range comment в таких случаях с begin/end. Подумал, может что-то есть в языке
Тогда комментарии - это самое то
И да, оно уже есть в языке
Но если очень хочется (непонятно зачем) - inline fun String.invoke(block: () -> Unit) = block()
источник

K

Kopusha in Kotlin Community
такие комментарии, с началом и концом, потом часто превращаются в кашу. Я так.. больше как упражнение. Спасибо.
источник

VP

Vladimir Petrakovich in Kotlin Community
Kopusha
такие комментарии, с началом и концом, потом часто превращаются в кашу. Я так.. больше как упражнение. Спасибо.
Возможно есть смысл вынести этот блок кода в отдельную функцию. У него тогда и название будет человеческое, и структура нормальная.
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Если сделать на Sequence, будет sequence. Генерация листа в общем случае дешевле
Это если данных нет и аррай
источник

VP

Vladimir Petrakovich in Kotlin Community
И входы-выходы более-менее понятные, а не каша на 100-200 строк
источник

I

Igor in Kotlin Community
Vladimir Petrakovich
Возможно есть смысл вынести этот блок кода в отдельную функцию. У него тогда и название будет человеческое, и структура нормальная.
И положить ее можно внутрь вызывающей функции 👍 (постоянно так в f# делаю)
источник

BV

Boris Vanin in Kotlin Community
А чо, тесты так и пишут 🤷‍♂
источник

nt

nikita tukkel in Kotlin Community
всем привет. сейчас у меня не специально в процессе работы получился пазлер. и это было бы смешно, если бы это была очередная шутка про javascript, но это про kotlin 😞
гляньте плиз:
https://stackoverflow.com/questions/60760071/kotlin-case-of-non-intuitive-type-inference
источник

RI

Ruslan Ibragimov in Kotlin Community
nikita tukkel
всем привет. сейчас у меня не специально в процессе работы получился пазлер. и это было бы смешно, если бы это была очередная шутка про javascript, но это про kotlin 😞
гляньте плиз:
https://stackoverflow.com/questions/60760071/kotlin-case-of-non-intuitive-type-inference
Ну throw smth походит, потому что это тип Nothing
источник

nt

nikita tukkel in Kotlin Community
это понятно. но дальше получается, что у функции ты написал <T : TestData>, а компилятор тебе вывел тип переменной в Nothing. что-то в этом есть неправильное.
источник

RI

Ruslan Ibragimov in Kotlin Community
Ну такой вот Nothing, на самом деле очень логично, например если вот так написать:

puzzler1 {
   try {
       TestData("Next number is ${it.toInt() + 1}")
   } catch (e: NumberFormatException) {
       // log
       throw e
   }
}


то без nothing не получилось бы этому try (который экспрешен) кинуть эксепшен
источник

RI

Ruslan Ibragimov in Kotlin Community
А так получается что внутри try тип TestData, в catch Nothing, тип всего выражения - TestData, т.к. Nothing : TestData
источник

nt

nikita tukkel in Kotlin Community
а разве Nothing : TestData ? я про это не подумал
источник

RI

Ruslan Ibragimov in Kotlin Community
источник

nt

nikita tukkel in Kotlin Community
спасибо. теперь я понял, все логично. но остается вопрос, что сделать, чтобы код перестал быть пазлером, стал очевидным.
источник

AN

Alexander Nozik in Kotlin Community
Вот только что на лекции показывал :). Если запись есть, могу потом кинуть
источник

RI

Ruslan Ibragimov in Kotlin Community
notok2 у меня выводит как TestData и не требует кастов в assertEquals
источник

RI

Ruslan Ibragimov in Kotlin Community
или в чем там смысл примера
источник