They mainly differ by the receiver (`this` vs `it`) and the return value (receiver vs lambda result). Example: `apply` configures and returns the object; `let` transforms and returns the lambda result.
val user = User("Ada")
.apply { active = true } // returns receiver
val nameLen = user.name.let { it.length } // returns lambda result