Size: a a a

2020 November 02

HV

Harry Vorobyninov in KotlinLangRu
_OM_
Если инициализируете то выделит а нет так нет
ТЕ. Это будет просто ссылка с значением null
Понял, спасибо)
источник

BJ

BZ JL in KotlinLangRu
Thanks
источник

ИИ

Иван Иванов... in KotlinLangRu
Bogdan Panchenko
Ну там два подхода, обычный sql dsl, и dao dsl который больше на хибер смахивает
Кхм. Я опять со своими переживаниями по поводу размеров.
На днях я открыл для себя момент, что все неинлайн лямбды генерируются в классы. Не получится ли в этих моднявых эскуэл дслях раздутых бинарников?
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
Кхм. Я опять со своими переживаниями по поводу размеров.
На днях я открыл для себя момент, что все неинлайн лямбды генерируются в классы. Не получится ли в этих моднявых эскуэл дслях раздутых бинарников?
да не вроде нет, пока не увидел в этом проблемы
источник

BP

Bogdan Panchenko in KotlinLangRu
в андрооиде может и попарился, а на сервере увы пока либы больше
источник

ИИ

Иван Иванов... in KotlinLangRu
Bogdan Panchenko
да не вроде нет, пока не увидел в этом проблемы
Когда мы обсуждали joinToString, я потом на своём рабочем проекте посмотрел 70 упоминаний. Это конечно всего 1.5кб*70 = 105кб. Но это только по джоинТуСтринг. А сколько таких лямбд ещё может быть?)

С популяризацией дсл ситуация может резко обостриться :)
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
Когда мы обсуждали joinToString, я потом на своём рабочем проекте посмотрел 70 упоминаний. Это конечно всего 1.5кб*70 = 105кб. Но это только по джоинТуСтринг. А сколько таких лямбд ещё может быть?)

С популяризацией дсл ситуация может резко обостриться :)
источник

BP

Bogdan Panchenko in KotlinLangRu
у тебя явно еще что то было
источник

BP

Bogdan Panchenko in KotlinLangRu
не инлайн лямбы как раз тем и хороши что они не раздувают байткод, вызови функцию которая принимает инлайн лямбду в 20 местах
источник

BP

Bogdan Panchenko in KotlinLangRu
блин получается это только на лине запустится( блин
источник

ИИ

Иван Иванов... in KotlinLangRu
Bogdan Panchenko
не инлайн лямбы как раз тем и хороши что они не раздувают байткод, вызови функцию которая принимает инлайн лямбду в 20 местах
Хм. Я так полагаю мне стоит собрать все лямбды, которые, делают одно и то же, например { it:Int -> it.toString() } ?
Вряд ли котлин за меня проанализирует лямбды, одинаковые по параметрам и содержанию
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
Хм. Я так полагаю мне стоит собрать все лямбды, которые, делают одно и то же, например { it:Int -> it.toString() } ?
Вряд ли котлин за меня проанализирует лямбды, одинаковые по параметрам и содержанию
да
источник

BP

Bogdan Panchenko in KotlinLangRu
можно еще поэкспериментировать с fun(Int::toString) интерестнно много мусора нагенерит
источник

ИИ

Иван Иванов... in KotlinLangRu
А если я обращаюсь к переменным вне лямбды, как это можно описать в val f = { i:Int -> i.toString() + outerVar.toString() }?
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
А если я обращаюсь к переменным вне лямбды, как это можно описать в val f = { i:Int -> i.toString() + outerVar.toString() }?
можно если она доступна в скоупе где ты объявляешь f
источник

ИИ

Иван Иванов... in KotlinLangRu
Bogdan Panchenko
можно если она доступна в скоупе где ты объявляешь f
Где я объявляю -- понятно)
А в контексте?
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
Где я объявляю -- понятно)
А в контексте?
не понял, ну вот как то так:
var other = 100
// компилятор не поймет где взять outerVar, error
val f = { i: Int -> i.toString() + outerVar.toString()  }
val f2 = { a: Int, b: Int -> a.toString() + b.toString()  }
val f3 = { a: Int -> a.toString() + other.toString()  } // ok

fun test() {
   val outerVar = 10
   val i = 5
   f(i) // error
   f2(i, outerVar) // ok
   f3(i) // ok
}
источник

BP

Bogdan Panchenko in KotlinLangRu
если переменая/функция в зоне видимости - можно использовать
источник

ИИ

Иван Иванов... in KotlinLangRu
Bogdan Panchenko
не понял, ну вот как то так:
var other = 100
// компилятор не поймет где взять outerVar, error
val f = { i: Int -> i.toString() + outerVar.toString()  }
val f2 = { a: Int, b: Int -> a.toString() + b.toString()  }
val f3 = { a: Int -> a.toString() + other.toString()  } // ok

fun test() {
   val outerVar = 10
   val i = 5
   f(i) // error
   f2(i, outerVar) // ok
   f3(i) // ok
}
Понял. Ну, да, логично. Компилятор получается делает за нас грязную работу и добавляет в лямбда-классы неявные параметры?
источник

BP

Bogdan Panchenko in KotlinLangRu
Иван Иванов
Понял. Ну, да, логично. Компилятор получается делает за нас грязную работу и добавляет в лямбда-классы неявные параметры?
нет, вообще в jvm нет лямбд, это замыкания, они могут захватывать состояние
источник