コールバック地獄からの解放 suspend fun getMyUserId(): Long = ... suspend fun findFriends(id: Long): List<User> = ... button.onClickListener { launch(UI) { val id = getMyUserId() val friends = findFriends(id) friendsView.addFriends(friends) } }
コールバック地獄からの解放 suspend fun getMyUserId(): Long = ... suspend fun findFriends(id: Long): List<User> = ... button.onClickListener { launch(UI) { val id = getMyUserId() val friends = findFriends(id) friendsView.addFriends(friends) } }
= (Event) -> Unit class MyComponent { var eventListener: EventListener = { e -> } } class User(val name: Name) // typealias Name = String data class Name(val value: String)
= (Event) -> Unit class MyComponent { var eventListener: EventListener = { e -> } } class User(val name: Name) // typealias Name = String data class Name(val value: String) 型の組み合わせに名前を付けるイメージ
= (Event) -> Unit class MyComponent { var eventListener: EventListener = { e -> } } class User(val name: Name) // typealias Name = String data class Name(val value: String) EventListenerに(Event) -> Unit オブジェクトを代入可能
= (Event) -> Unit class MyComponent { var eventListener: EventListener = { e -> } } class User(val name: Name) // typealias Name = String data class Name(val value: String) 簡単に代入ミスは起こる val city = "Tokyo" User(city)
= (Event) -> Unit class MyComponent { var eventListener: EventListener = { e -> } } class User(val name: Name) // typealias Name = String data class Name(val value: String) 型のご加護が val city = "Tokyo" User(city) //型不一致
n * n fun squareOf4() = (this::square)(4) fun squareOf5() = 5.let(this::square) } object Foo { fun square(n: Int) = n * n fun squareOf4() = (::square)(4) fun squareOf5() = 5.let(::square) }
Greeter { ... } class JapaneseGreeter: Greeter { ... } interface Speaker { fun speak() } class Human(val greeter: Greeter): Speaker { ... } class App: Application() { val kodein: Kodein by Kodein.lazy { bind<Greeter>("en") with provider { EnglishGreeter() } bind<Greeter>("ja") with singleton { JapaneseGreeter() } bind<Speaker>() with singleton { Human(instance("ja")) } } } Human has a Greeter
val name = varchar("name", length = 100) } object Tasks: Table() { val id = long("id").autoIncrement().primaryKey() val content = text("content") val completedAt = datetime("completed_at").nullable() val teamId = long("team_id") references Teams.id }
val name = varchar("name", length = 100) } object Tasks: Table() { val id = long("id").autoIncrement().primaryKey() val content = text("content") val completedAt = datetime("completed_at").nullable() val teamId = long("team_id") references Teams.id } 外部キー設定
length = 100) } object Tasks: LongIdTable() { val content: text("content") val completedAt: datetime("completed_at").nullable() val team = reference("team", Teams) } class Team(id: EntityID<Long>): LongEntity(id) { companion object: LongEntityClass<Team>(Teams) var name by Teams.name val tasks by Tasks.referrersOn(Tasks.team) } class Task(id: EntityID<Long>): LongEntity(id) { companion object: LongEntityClass<Task>(Tasks) var content by Tasks.content var completedAt by Tasks.completedAt var team by Team.referencedOn(Tasks.team) }
length = 100) } object Tasks: LongIdTable() { val content: text("content") val completedAt: datetime("completed_at").nullable() val team = reference("team", Teams) } class Team(id: EntityID<Long>): LongEntity(id) { companion object: LongEntityClass<Team>(Teams) var name by Teams.name val tasks by Tasks.referrersOn(Tasks.team) } class Task(id: EntityID<Long>): LongEntity(id) { companion object: LongEntityClass<Task>(Tasks) var content by Tasks.content var completedAt by Tasks.completedAt var team by Team.referencedOn(Tasks.team) } 関連を定義