with() и apply(). Прочитал что они действуют одинаково выполняют множественное операций над одним и тем же объектом, но apply() еще возвращает этот объект. Объясните, вот пример из интернета:
val button = findViewById<Button>(R.id.button)
button.text = "I am a button"
button.textSize =18.0F
button.setBackgroundColor(Color.RED)
Давайте применим with():
val button = findViewById<Button>(R.id.button)
with(button){
text = "I am a button"
textSize = 18.0F
setBackgroundColor(Color.RED)
}
Давайте применим apply():
val button = findViewById<Button>(R.id.button)
button.apply{
text = "I am a button"
textSize = 18.0F
setBackgroundColor(Color.RED)
}
В чем тут разница?
Разница в семантике как по мне, apply чаще всего используется для заполнения полей объекта/донастройкой объекта. А with скорее нужен, когда нам нужно вызвать кучу полей из объекта и передать их куда-то. А вообще в доках все объясняют
доки? вот и изучаю, так бы не задавал этот вопрос. на счет вашей семантики в подсознании не убежден, т.к. написанная реализация не удовлетворяет данным критериям в условности. вопрос остается открытым пока не появится более подробнее реализация раскрывающая всю суть данных расширений. ваш ответ учту не принимая близко к точности информации. но всеравно благодарствую.
Разницы между with и apply две. Первая. как вы верно заметили, способ вызова (экстеншн против передачи параметром), вторая — результат (возврат ресивера против возврата из лямбды). Кроме apply есть ещё run, который даже по результату совпадает, и отличается только способом вызова. А про доку — это сюда: https://kotlinlang.org/docs/scope-functions.html
еще раз повторюсь зная бы что то из интернета не задавал таких вопросов тут.
Тащемта да, ссылку на доку я закинул ровно потому, что там есть по предложению, когда какую функцию применять. Тут действительно часто речь о конвенции, так как в принципе все пять функций спокойно можно заменить одной.
Обсуждают сегодня