Skip to content

Instantly share code, notes, and snippets.

fun someFunction(
lambda: (String) -> Unit
) {
// TODO
}
fun main() {
someFunction({ print(it) })
someFunction {
A.() -> Unit // função que não recebe parâmetros e não tem retorno, no contexto de uma instância de A
(String) -> Int // recebe uma String como parâmetro e retorna um Int
() -> Unit // não recebe parâmetro e não retorna nada
val user = user {
name("Fulano")
contactInfo {
email("fulano@gmail.com")
phoneNumber("11991234567")
}
+Role.User
+Role.Admin
}
...
@UserDslScope
class UserDsl {
...
@UserDslScope
class UserContactInfoDsl {
...
val user = user {
name = "Fulano"
contactInfo {
email = "fulano@gmail.com"
phoneNumber = "11991234567"
roles {
+Role.User
+Role.Admin
}
}
fun user(init: UserDsl.() -> Unit): User {
return UserDsl().apply(init).build()
}
class UserDsl {
...
private val contactInfoDsl = UserContactInfoDsl()
private val rolesDsl = UserRolesDsl()
fun contactInfo(init: UserContactInfoDsl.() -> Unit) {
contactInfoDsl.apply(init)
}
class UserDsl {
...
private val contactInfoDsl = UserContactInfoDsl()
private val rolesDsl = UserRolesDsl()
...
fun build(): User {
fun build(): User {
return User(
name = name,
contactInfo = ContactInfo(
email = "?",
phoneNumber = "?"
),
roles = emptyList()
)
}