-
Notifications
You must be signed in to change notification settings - Fork 0
/
8-properties.kt
48 lines (36 loc) · 991 Bytes
/
8-properties.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package org.athenian
import java.io.IOException
import java.time.LocalDate
// Primary constructor
// Properties as params
class Student(val firstName: String, val lastName: String, private val birthDate: LocalDate) {
var counter = 0
private set
// With block body
val title: String
get() {
return if (age < 16) "Mstr" else "Mr"
}
// With expression body
val fullName
get() = "$title $firstName $lastName"
val age
get() = birthDate.until(LocalDate.now()).years
var balance = 0
set(value) {
counter++
if (value >= 0)
field = value
else
throw IOException("Ignoring negative balance value $value")
}
}
fun main() {
val p = Student("Bill", "Smith", LocalDate.of(1980, 10, 31))
println("${p.title} ${p.fullName} (aka ${p.firstName}) is ${p.age} years old")
p.balance = -4
println("Balance = ${p.balance}")
p.balance = 4
println("Balance = ${p.balance}")
println("Counter = ${p.counter}")
}