Hello World
package hello
fun main(args : Array) {
println("Hello, world!")
}
Slide 7
Slide 7 text
Hello World
package hello
fun main(args : Array) {
println("Hello, world!")
}
ύοέʔδԼʹ
͕ؔஔ͚Δ
ΤϯτϦϙΠϯτ
mainؔ
Slide 8
Slide 8 text
Hello World
package hello
fun main(args : Array) {
println("Hello, world!")
}
มͷܕ͕ޙஔ
ྻ͕
δΣωϦΫε
Slide 9
Slide 9 text
Hello World
package hello
fun main(args : Array) {
println("Hello, world!")
}
ηϛίϩϯ
ෆཁ
Slide 10
Slide 10 text
Ϋϥε
class Greeter
!
val greeter = Greeter()
Slide 11
Slide 11 text
Ϋϥε
class Greeter
!
val greeter = Greeter()
࠷খͷ
Ϋϥεఆٛ
Slide 12
Slide 12 text
Ϋϥε
class Greeter
!
val greeter = Greeter()
ΠϯελϯεԽ
newෆཁ
ܕࢦఆෆཁ:
ܕਪ
Slide 13
Slide 13 text
Ϋϥε
class Greeter(val name: String) {
fun greet() {
println("Hello, $name")
}
}
Slide 14
Slide 14 text
Ϋϥε
class Greeter(val name: String) {
fun greet() {
println("Hello, $name")
}
}
ϓϩύςΟ
val g = Greeter(“hoge”)
val name = g.name
Slide 15
Slide 15 text
Ϋϥε
class Greeter(val name: String) {
fun greet() {
println("Hello, $name")
}
}
ϝιου
ࣜ(ม)ΛຒΊࠐΊΔ
Slide 16
Slide 16 text
ϓϩύςΟ
class User(name: String) {
var name: String = name
}
!
val user = User("Taro")
user.name /
/ => "Taro"
Slide 17
Slide 17 text
ϓϩύςΟ
class User(name: String) {
var name: String = name
}
!
val user = User("Taro")
user.name /
/ => "Taro"
ίϯετϥΫλ
ϓϩύςΟ
Slide 18
Slide 18 text
ϓϩύςΟ
class User(name: String) {
var name: String = name
}
!
val user = User("Taro")
user.name /
/ => "Taro"
ϑΟʔϧυʹ
ΞΫηεͯ͠Δ෩
Slide 19
Slide 19 text
ΞΫηα
class User(name: String) {
var name: String = name
set(name: String) {$name = name }
get(): String = $name
}
Slide 20
Slide 20 text
ΞΫηα
class User(name: String) {
var name: String = name
set(name: String) {$name = name }
get(): String = $name
}
Setter
Getter
Backing Field
Slide 21
Slide 21 text
Delegated Property
class User(name: String) {
val name: String by Decorator(name)
}
!
class Decorator(val str: String) {
fun get(thisRef: Any,
prop:PropertyMetadata): String = "<<$str>>"
}
Slide 22
Slide 22 text
Delegated Property
class User(name: String) {
val name: String by Decorator(name)
}
!
class Decorator(val str: String) {
fun get(thisRef: Any,
prop:PropertyMetadata): String = "<<$str>>"
}
User#nameͷ
ΞΫηε͕ҕৡ͞ΕΔ
Slide 23
Slide 23 text
Ԡ༻ྫ
class MainActivity: Activity() {
val submitButton: Button by injector()
!
fun onCreate(savedInstanceState: Bundle?) {
submitButton.setOnClickListener(::submit)
}
}
Slide 24
Slide 24 text
ܕ҆શ
val a: Array = array(1, 2, 3)
val b: Array = a /
/ NG
val c: Array = a /
/ OK
!
a[0] = 5 /
/ OK
c[0] = 5 /
/ NG
Slide 25
Slide 25 text
ܕ҆શ
val a: Array = array(1, 2, 3)
val b: Array = a /
/ NG
val c: Array = a /
/ OK
!
a[0] = 5 /
/ OK
c[0] = 5 /
/ NG
ArrayσϑΥϧτͰ
ෆม(invariant)
มҐࢦఆ͕Մೳ
͜͜Ͱڞม(covariant)
Slide 26
Slide 26 text
ܕ҆શ
val a: Array = array(1, 2, 3)
val b: Array = a /
/ Error
val c: Array = a /
/ OK
!
a[0] = 5 /
/ OK
c[0] = 5 /
/ NG
ܕͷෆ߹Λ
͍Ͱ͘ΕΔ
Slide 27
Slide 27 text
એݴՕॴࢄ
val a: List = listOf(1, 2, 3)
val b: List = a /
/ OK
————————————————————————
class List …
Slide 28
Slide 28 text
એݴՕॴࢄ
val a: List = listOf(1, 2, 3)
val b: List = a
————————————————————————
class List …
Ϋϥεͷએݴ࣌ʹ
มҐࢦఆͰ͖Δ
Slide 29
Slide 29 text
͕ؔfirst-class
val add = {
(a: Int, b: Int) -> a + b
}
!
add(3, 4) /
/ => 7
TCO
tailRecursive
fun sum(ints: List, sum: Int = 0): Int =
if(ints.isEmpty()) sum
else sum(ints.tail, sum + ints.first())
Slide 38
Slide 38 text
TCO
tailRecursive
fun sum(ints: List, sum: Int = 0): Int =
if(ints.isEmpty()) sum
else sum(ints.tail, sum + ints.first())
tailRecursive
Ξϊςʔγϣϯ
Slide 39
Slide 39 text
null҆શ
val a: Int = null /
/ OK
val b: Int? = null /
/ NG
b.toString() /
/ NG
if(b != null) b.toString() /
/ OK
b?.toString() /
/ OK
Slide 40
Slide 40 text
null҆શ
val a: Int = null /
/ OK
val b: Int? = null /
/ NG
b.toString() /
/ NG
if(b != null) b.toString() /
/ OK
b?.toString() /
/ OK
if (b != null) b.toString()
else null
Slide 41
Slide 41 text
null҆શ
fun toInt(s: String): Int?
fun square(n: Int): Int
จࣈྻΛtoInt()Ͱʹม
ͦͷΛsquare()Ͱೋ͍ͨ͠
Slide 42
Slide 42 text
ෳࡶ…
if(s != null) {
val i = toInt(s)
if(i != null) square(i) else null
} else {
null
}
Slide 43
Slide 43 text
ศརͳؔΛಋೖ
fun T.bind(f: ((T) -> R)?): R
= f?.invoke(this)