変数と型とリテラル
型とリテラル
- 他の言語にもあるような型は基本的にある
- 文字、文字列
- "Kotlin"
- 整数
- 1
- 浮動少数
- 1.5
- 真偽値
- true
- など
- 文字、文字列
変数、定数
// 変数
var hoge: String = "hoge"
// 定数
val fuga: String = "fuga"
明記した型と代入したい型が異なる場合はもちろんコンパイルエラー
型推論のおかげで以下のように型名を省略できる
// 変数
var hoge = "hoge"
// 定数
val fuga = "fuga"
さまざまなオブジェクト
文字列
val name = "hicka04"
print("Hello, ${name}!")
print("Hello, $name!")
// Swiftなら
// print("Hello, \(name)!)
// 複数行
val message = """
hogehoge
fugafuga
"""
配列
val strings = arrayOf("red", "green", "blue")
print(strings[0]) // red
リスト
val ints: List<Int> = listOf<Int>(1, 2, 3)
ints[0] = 5 // コンパイルエラー
// ListはImmutableなのでListの中身を編集することはできない
// varで宣言すればList自体を再代入は可能
// Mutableはこっち
val chars: MutableList<Char> = mutableListOf('a', 'b')
chars[0] = 'c' // ['c', 'b']
chars += 'X' // ['c', 'b', 'X']
chars.removeAt(0) // ['b', 'X']
セット
// Immutable
val ints = setOf(1, 2, 1, 3)
print(ints) // [1, 2, 3]
// Mutable
val chars = mutableSetOf('a', 'b', 'a')
print(chars) // ['a', 'b']
マップ
// ImmutableとMutableがそれぞれあるが今回は省略
val map = mutableMapOf("one" to 1, "two" to 2)
println(map) // {one=1, two=2}
リスト、セット、マップの雑感
- Swiftだと
var
で宣言すればMutable、let
で宣言すればImmutableなので、
val
とmutable
が両立しているのが慣れないな…。
レンジ
val range = 0 .. 5
println(1 in range) // true
println(1 !in range) // false
println(range.toList()) //[0, 1, 2, 3, 4, 5]
println((5 downTo 0).toList()) // [5, 4, 3, 2, 1, 0]
println((1 .. 5 step 2).toList()) // [1, 3, 5]
末尾を含まないレンジが作れないのかな…
Swiftなら0 ..< 5
なんだけど