169 похожих чатов

Всем привет. вопрос по котлину: расширенные функции котлина такие как

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)
}

В чем тут разница?

5 ответов

8 просмотров

Разница в семантике как по мне, apply чаще всего используется для заполнения полей объекта/донастройкой объекта. А with скорее нужен, когда нам нужно вызвать кучу полей из объекта и передать их куда-то. А вообще в доках все объясняют

Andrey-༺ShkodeR༻ Автор вопроса
Кирилл
Разница в семантике как по мне, apply чаще всего и...

доки? вот и изучаю, так бы не задавал этот вопрос. на счет вашей семантики в подсознании не убежден, т.к. написанная реализация не удовлетворяет данным критериям в условности. вопрос остается открытым пока не появится более подробнее реализация раскрывающая всю суть данных расширений. ваш ответ учту не принимая близко к точности информации. но всеравно благодарствую.

Разницы между with и apply две. Первая. как вы верно заметили, способ вызова (экстеншн против передачи параметром), вторая — результат (возврат ресивера против возврата из лямбды). Кроме apply есть ещё run, который даже по результату совпадает, и отличается только способом вызова. А про доку — это сюда: https://kotlinlang.org/docs/scope-functions.html

Andrey-༺ShkodeR༻ Автор вопроса
Andrew Mikhaylov
Разницы между with и apply две. Первая. как вы вер...

еще раз повторюсь зная бы что то из интернета не задавал таких вопросов тут.

Andrey ༺ShkodeR༻
еще раз повторюсь зная бы что то из интернета не з...

Тащемта да, ссылку на доку я закинул ровно потому, что там есть по предложению, когда какую функцию применять. Тут действительно часто речь о конвенции, так как в принципе все пять функций спокойно можно заменить одной.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Коллеги, как получить PId для собственного процесса из под линукса?
Роман Лях (rgreat)
6
@ahndmn @ayaw0_0 здарова, на чем пишете?
Aiwan \ (•◡•) / _bot
7
Карта сайта