Size: a a a

Kotlin Community

2020 June 05

BP

Bogdan Panchenko in Kotlin Community
Yanis
все-таки если нужен перф, можно смело писать на джаве, меньше сюрпризов будет
Я очень редко вижу применения takeIf. Если нужен перфоманс то и на джаве код будет ужасен. Я видел код где насильно приводили к Integer заранее
источник

BP

Bogdan Panchenko in Kotlin Community
Нужно просто понимать во что будет компилироваться код
источник

Y

Yanis in Kotlin Community
ну мне не очень понятно зачем делать такие преобразования чтобы проверить if
источник

Y

Yanis in Kotlin Community
я конечно понимаю что это некий глобальный механизм написан и там просто забили на проверку примитивов
источник

BP

Bogdan Panchenko in Kotlin Community
Yanis
я конечно понимаю что это некий глобальный механизм написан и там просто забили на проверку примитивов
А что тебе даст проверка на примитив ? У тебя входной тип int а выходной тип Integer. Конечно можно подумать об оптимизации, при наличии :? Делать немного другой иф
источник

Y

Yanis in Kotlin Community
в коде вообще нет Integer
источник

AL

Alexander Levin in Kotlin Community
Yanis
я конечно понимаю что это некий глобальный механизм написан и там просто забили на проверку примитивов
Ну тут не сколько проверка примитивов нужна, сколько просмотр выражения дальше. takeIf вернёт nullable тип. Примитив не может быть null.
источник

Y

Yanis in Kotlin Community
только примитивы
источник

Y

Yanis in Kotlin Community
Alexander Levin
Ну тут не сколько проверка примитивов нужна, сколько просмотр выражения дальше. takeIf вернёт nullable тип. Примитив не может быть null.
тут согласен, неявное преобразование получается
источник

BP

Bogdan Panchenko in Kotlin Community
Yanis
в коде вообще нет Integer
Integer == Int?
источник

Y

Yanis in Kotlin Community
Bogdan Panchenko
Integer == Int?
код такой
val v = array[0].takeif { it > -1} ?: return
источник

BP

Bogdan Panchenko in Kotlin Community
Yanis
код такой
val v = array[0].takeif { it > -1} ?: return
Ну это не меняет возвращаемый тип функцией takeIf. Повторяюсь в подобных случаях компилятор мог бы оптимизировать
источник

BP

Bogdan Panchenko in Kotlin Community
Yanis
код такой
val v = array[0].takeif { it > -1} ?: return
Просто посмотрите в сгенерированный код
источник

Y

Yanis in Kotlin Community
я видел, выглядит как-будто происходит непонятная конвертация
источник

AL

Alexander Levin in Kotlin Community
Yanis
код такой
val v = array[0].takeif { it > -1} ?: return
Ну проблема не меняется, для оптимизации должен сгенериться не тот код, который написан, а тот, который оптимальнее (чтобы takeIf с элвисом оптимально соединялись)

Иначе мы в любом случае имеем то, что takeIf возвращает nullable тип, который точно будет Integer с точки зрения джавы
источник

Y

Yanis in Kotlin Community
теперь я понимаю почему, просто ожидаешь не то что получаешь)
источник

AA

Andrey Antipov in Kotlin Community
Нет, всё ожидаемо. Просто компилятор не достаточно умный, чтобы понять, что для примитивов результат takeIf не во всех выражениях должен иметь тип Int?
Ну и я с трудом представляю, как это можно заоптимизировать, чтобы не сломать систему типов.
источник

BP

Bogdan Panchenko in Kotlin Community
Andrey Antipov
Нет, всё ожидаемо. Просто компилятор не достаточно умный, чтобы понять, что для примитивов результат takeIf не во всех выражениях должен иметь тип Int?
Ну и я с трудом представляю, как это можно заоптимизировать, чтобы не сломать систему типов.
А при чем тут система типов ? Оптимизация вполне может быть аналитической. Компилятор сгенерит более оптимальный код.
источник

AA

Andrey Antipov in Kotlin Community
Bogdan Panchenko
А при чем тут система типов ? Оптимизация вполне может быть аналитической. Компилятор сгенерит более оптимальный код.
Так-то да, но тогда выделение части выражения в переменную будет ломать оптимизацию
источник

BP

Bogdan Panchenko in Kotlin Community
Andrey Antipov
Так-то да, но тогда выделение части выражения в переменную будет ломать оптимизацию
какие ? у нас банальный if else. Я говорю про takeif ?: elseValue. В остальных случаях это мало возможно
источник