### ジェネリクス
型を汎用化する
class使用時にデータ型を指定する
class MyData<T> {
fun getThree(x: T){
println(x)
println(x)
println(x)
}
}
fun main(args: Array<String>) {
val mi = MyData<Int>()
mi.getThree(55)
}
### data class
data class Point(val x: Int, val y: Int)
fun main(args: Array<String>) {
val p1 = Point(3, 5)
val p2 = Point(3, 5)
println(p1)
println(if (p1 == p2) "same" else "not same")
}
### Collection
List: 順番を持つデータの集合(Immutable/Mutable)、Set: 順番を持たない|重複を許さないデータの集合(Immutable/Mutable)、Mapはkeyと値でデータを管理(Immutable/Mutable)
– Immutableなデータを作る
– listはlistOfで使う。変更する場合は、mutableListOfで使用する
fun main(args: Array<String>) {
val sales: List<Int> = listOf(20, 30, 40)
println(sales[1])
}
– setはsetOf
– 変更する場合は、mutableSetOfで使用する
fun main(args: Array<String>) {
val answers: Set<Int> = setOf(5, 3, 8, 5)
println(answers)
println(answers.contains(3))
val set1 = setOf(1, 3, 4, 8)
val set2 = setOf(3, 5, 7, 9)
println(set1.intersect(set2))
println(set1.union(set2))
}
– mapはmapOf
– mutableMap
fun main(args: Array<String>) {
val users: Map<String, Int> = mapOf("yamada" to 10, "tanaka" to 20, "sato" to 30)
println(users["yamada"])
println(users.size)
println(users.keys)
println(users.values)
println(users.entries)
}
### map
コレクションを処理するための命令にmap, filter, forEachなどが使える
fun main(args: Array<String>) {
val prices = listOf(53.2, 48.2, 32.8)
prices
.map{ n -> n * 1.08} // 引数 ->処理
.filter { n -> n > 50}
.forEach { println(it)}
}
### 例外処理
try & catch
class MyException(message: String): Throwable(message){
}
fun div(a: Int, b: Int){
try {
if(b < 0){
throw MyException("not minus!")
}
println(a / b)
} catch(e: ArithmeticException){
println(e.message)
}
}
fun main(args: Array<String>) {
div(3, 0)
}
### Nullable
nullになりそうな型は、型の後ろに「?」を付ける
fun main(args: Array<String>) {
val s: String = null
println(s)
}
Null can not be a value of a non-null type String
fun main(args: Array<String>) {
val s: String? = null
println(s)
if(s != null){
println(s.length)
} else {
println(null)
}
}