基本データ型
| 対応: | Kotlin 1.0(2016) |
|---|
Kotlin の基本データ型は Int・Long・Double・Float・Boolean・Char・Byte・Short の8種類です。すべてオブジェクトとして扱われますが、コンパイル時にプリミティブ型に最適化されます。
構文
// 型注釈で明示するか、リテラルから型推論されます val i: Int = 42 val l: Long = 1_000_000L // L サフィックスで Long になる val d: Double = 3.14 val f: Float = 3.14f // f サフィックスで Float になる val b: Boolean = true val c: Char = 'A' // 文字はシングルクォートで囲む
型一覧
| 型 | ビット幅 | 値の範囲 / 概要 |
|---|---|---|
| Byte | 8 bit | -128 〜 127 の整数です。 |
| Short | 16 bit | -32,768 〜 32,767 の整数です。 |
| Int | 32 bit | -2,147,483,648 〜 2,147,483,647 の整数です。整数リテラルのデフォルト型です。 |
| Long | 64 bit | 約 ±9.2 × 10¹⁸ の整数です。リテラルは末尾に『L』を付けます。 |
| Float | 32 bit | 単精度浮動小数点数です。リテラルは末尾に『f』を付けます。 |
| Double | 64 bit | 倍精度浮動小数点数です。小数リテラルのデフォルト型です。 |
| Boolean | - | 『true』または『false』のみを持ちます。 |
| Char | 16 bit | Unicode の単一文字です。シングルクォートで表します。 |
サンプルコード
sample_basic_types.kt
fun main() {
// 整数型の例
val age: Int = 25
val population: Long = 125_000_000L // アンダースコアで桁を区切れる
println(age) // 『25』と出力される
println(population) // 『125000000』と出力される
// 浮動小数点型の例
val pi: Double = 3.14159
val weight: Float = 65.5f
println(pi) // 『3.14159』と出力される
println(weight) // 『65.5』と出力される
// Boolean 型の例
val isKotlin: Boolean = true
val isJava = false // 型推論で Boolean になる
println(isKotlin && !isJava) // 『true』と出力される
// Char 型の例
val letter: Char = 'K'
val code = letter.code // Unicode コードポイントを取得する
println(letter) // 『K』と出力される
println(code) // 『75』と出力される
// 型変換(数値型間の変換)は明示的に行う
val num: Int = 42
val numLong: Long = num.toLong()
val numDouble: Double = num.toDouble()
println(numLong) // 『42』と出力される
println(numDouble) // 『42.0』と出力される
}
コンパイルして実行すると次のようになります。
kotlinc sample_basic_types.kt -include-runtime -d sample_basic_types.jar java -jar sample_basic_types.jar 25 125000000 3.14159 65.5 true K 75 42 42.0
よくあるミス
数値型間の代入や『Char』型の比較では、型の不一致がコンパイルエラーになります。
NG パターン(コンパイルエラーになる)
fun main() {
val score: Int = 100
// val bigScore: Long = score // NG: Int は Long に暗黙変換されない
// val weight: Float = 65.5 // NG: f サフィックスなしは Double
val c: Char = 'A'
// if (c == 65) { } // NG: Char と Int を == で比較できない
val result = 7 / 2 // NG: 整数同士の割り算は小数にならない(結果は 3)
}
sample_basic_types_mistakes.kt
fun main() {
val score: Int = 100
val bigScore: Long = score.toLong() // toLong() で明示変換する
val weight: Float = 65.5f // f サフィックスが必要
val c: Char = 'A'
if (c.code == 65) { println("A です") } // .code でコードポイントを取り出す
val result = 7 / 2 // 3(切り捨て)
val correct = 7.0 / 2 // 3.5(Double として計算)
println(result)
println(correct)
}
コンパイルして実行すると次のようになります。
kotlinc sample_basic_types_mistakes.kt -include-runtime -d sample_basic_types_mistakes.jar java -jar sample_basic_types_mistakes.jar A です 3 3.5
概要
Kotlin の数値型は Java とは異なり、型間の暗黙的な変換を行いません。『Int』を『Long』に代入するような場合も、必ず『toLong()』などの変換メソッドを明示的に呼び出す必要があります。これによりサイレントな精度ロスや型ミスマッチを防いでいます。
数値リテラルにはアンダースコアを挿入して桁を見やすくする書き方も使えます。変数宣言の基本は『val / var』を、文字列については『String テンプレート』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。