Использование it в лямбдах
Использовать аргумент по умолчанию it следует только в однострочных лямбдах, где сразу видно контекст и понятно что содержит it.
Как не надо делать:
results
.map { result ->
result as LiveResults
}.map { liveResult ->
liveResult.toResultsWithRaceInfo()
}.flatten()Как лучше сделать:
results
.map { it as LiveResults }
.map { it.toResultsWithRaceInfo() }
.flatten()В многострочных лямбдах следует давать имя аргументу и использовать доступ по имени - это позволяет в коде лямбды явно видеть что это за аргумент.
Код с именованным аргументом лямбды защищен от ошибки с использованием переопределенного it, когда внутри вложенной лямбды используется повторно тоже самое имя аргумента - it, но уже с другим значением и контекстом.Как не надо делать:
val lastCheckpoint = results
.mapNotNull { it.subStages }
.map { it.indexOfLast { it?.checkPointTime != null } }Как лучше сделать:
val lastCheckpoint = results
.mapNotNull { it.subStages }
.map { subStages ->
subStages.indexOfLast { it?.checkPointTime != null }
}