getter, setter
class User(var name: String){
var team = "red"
get(){
return field.toUpperCase()
}
set(value){
if (value !=""){
field = value
}
}
fun sayHi(){
println("hi $name")
}
}
fun main(args: Array<String>){
val tom = User("tom")
println(tom.team)
tom.sayHi()
}
class override
class AdminUser(name: String): User(name){
fun sayHello(){
println("hello $name")
}
override fun sayHi(){
println("what $name")
}
}
open class User(var name: String){
open fun sayHi(){
println("hi $name")
}
}
fun main(args: Array<String>){
val bob = AdminUser("bob")
println(bob.name)
bob.sayHi()
}
アクセス修飾子: privateとpublic
open class User(private var name: String){
open fun sayHi(){
println("hi $name")
}
}
class extension
fun User.sayHello(){
println("hello $name")
}
val User.myName: String
get() = "I am $name"
class User(var name: String){
open fun sayHi(){
println("hi $name")
}
}
fun main(args: Array<String>){
val bob = User("bob")
bob.sayHello()
bob.sayHi()
println(bob.myName)
}
抽象クラス
abstract class User {
abstract fun sayHi()
}
class Japanese: User(){
override fun sayHi(){
println("こんにちは")
}
}
class American: User(){
override fun sayHi(){
println("hi")
}
}
fun main(args: Array<String>){
val tom = American()
val taro = Japanese()
tom.sayHi()
taro.sayHi()
}
interface
interface Sharable{
// 抽象プロパティ、抽象メソッド、メソッド
val version: Double
fun share()
fun getInfo(){
println("Share I/F ($version)")
}
}
class User: Sharable {
override val version = 1.1
override fun share(){
println("Sharing..")
}
}
fun main(args: Array<String>){
val user = User()
user.share()
user.getInfo()
}
generics
class MyData<T> {
fun getThree(x: T){
println(x)
println(x)
println(x)
}
}
fun main(args: Array<String>){
val i = MyData<Int>()
i.getThree(32)
val s = MyData<String>()
s.getThree("hello")
}
データクラス
data class Point(val x: Int, val y: Int)
fun main(args: Array<String>){
val p1 = Point(3, 5)
val p2 = Point(3, 5)
val p3 = p1.copy()
println(p1)
println(if (p1 == p2) "same" else "not same")
}
List
fun main(args: Array<String>){
val sales: List<Int> = listOf(20, 30, 40)
println(sales[1])
println(sales.size)
for (sale in sales){
println(sale)
}
}
set
fun main(args: Array<String>){
val answers: Set<Int> = setOf(3, 5, 8, 3)
println(answers)
println(answers.contains(3))
val set1 = setOf(1, 3, 5, 8)
val set2 = setOf(3, 5, 8, 9)
println(set1.intersect(set2))
println(set1.union(set2))
println(set1.subtract(set2))
}
Map
fun main(args: Array<String>){
val users: Map<String, Int> = mapOf("kobayashi" to 10, "kagawa" to 22, "tanaka" to 33)
println(users["kobayashi"])
println(users.size)
println(users.keys)
println(users.values)
println(users.entries)
}
map, filter, foreach
fun main(args: Array<String>){
val prices = listOf(53.2, 48.2, 32.8)
prices
/*.map { n -> n + 1.08} //*/
.map { it * 1.08 }
.filter { it > 50 }
.forEach { println(it) }
}
例外処理
fun div(a: Int, b: Int){
try {
println(a / b)
} catch(e: ArithmeticException) {
println(e.message)
}
}
fun main(args: Array<String>){
div(3, 0)
}
Nullable型
fun main(args: Array<String>){
val s: String? = null
/*println(s)*/
/*if (s != null){
println(s.length)
} else {
println(null)
}*/
println(s?.length ?: -1)
}