Примеры в вашем вопросе не показывают истинную причину решения.
Прежде всего, поскольку вы не используете возвращаемое значение foo
, вы не должны использовать ни let
, ниrun
.Ваш выбор между also
и apply
.
Во-вторых, поскольку у вас уже есть результат, который вы хотите проверить в переменной на нуль, разница исчезает.Это лучший мотивирующий пример:
complexCall(calculateArg1(), calculateArg2())?.also {
results.add(it)
}
, в отличие от
val result = complexCall(calculateArg1(), calculateArg2())
if (result != null) {
results.add(result)
}
Во втором примере объявляется идентификатор result
, который теперь доступен для остальной части лексической области видимости.даже если вы закончили с этим в одной строке.
Первый пример, с другой стороны, сохраняет все автономным, и когда вы продолжаете читать остальную часть кода, вы на 100% уверены, что вам не нужно помнить о значенииresult
.