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
еще раз повторюсь зная бы что то из интернета не задавал таких вопросов тут.
Тащемта да, ссылку на доку я закинул ровно потому, что там есть по предложению, когда какую функцию применять. Тут действительно часто речь о конвенции, так как в принципе все пять функций спокойно можно заменить одной.
Обсуждают сегодня