Skip to main content

Использование it в лямбдах

  1. Использовать аргумент по умолчанию it следует только в однострочных лямбдах, где сразу видно контекст и понятно что содержит it.

    Как не надо делать:

    results
    .map { result ->
    result as LiveResults
    }.map { liveResult ->
    liveResult.toResultsWithRaceInfo()
    }.flatten()

    Как лучше сделать:

    results
    .map { it as LiveResults }
    .map { it.toResultsWithRaceInfo() }
    .flatten()
  2. В многострочных лямбдах следует давать имя аргументу и использовать доступ по имени - это позволяет в коде лямбды явно видеть что это за аргумент.
    Код с именованным аргументом лямбды защищен от ошибки с использованием переопределенного 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 }
    }