Kotlin - 変数
公開日:2019-11-06 更新日:2019-11-06
[Kotlin]
1. 概要
変数の使い方についてです。
2. 基本
val a: Int = 10
val b = 20
var c = a + b
println(a) // 10
println(b) // 20
println(c) // 30
3. 再代入可、読込専用
val で変数を宣言すると、読込専用となり、再代入した時にエラーになります。
再代入をする場合は、var で変数を宣言します。
他の言語と異なり、readonly などを付ける必要がないため、 基本は val で定義して、再設定する必要が出てきたら var に変更するのが良いと思います。
val a = 10
a = a + 1 // error: val cannot be reassigned
再代入をする場合は、var で変数を宣言します。
var a = 10
a = a + 1
他の言語と異なり、readonly などを付ける必要がないため、 基本は val で定義して、再設定する必要が出てきたら var に変更するのが良いと思います。
4. 変数の型
val valBool1 :Boolean = true
val valBool2 :Boolean = false
val valByte :Byte = 1 // -128 ~ 127
val valShort:Short = 1 // -32768 ~ 32767
val valInt :Int = 1 // -2147483648 ~ 2147483647
val valLong :Long = 1 // -9223372036854775808 ~ 9223372036854775807
//val valFloat :Float = 1.1 // error: the floating-point literal does not conform to the expected type Float
val valFloat :Float = 1.1F // 4バイト
val valDouble:Double = 1.1 // 8バイト
var c:Char = 'あ'
val s:String = "Hello"
val x:Any = "Any"
5. Null許容型
変数が null を保持する場合は、変数の型の最後に ? を付ける必要があります。
? を付けずに null を代入するとエラーになります。
Null許容型の変数のプロパティやメソッドを使用する場合は、「?.」や「!!.」を付けます。
「?.」と「!!.」の違いは、null を返すか実行時にエラーにするかです。
また、null 以外の値が入っていることが保証されている場合には、「?.」や「!!.」を付けなくても問題ありません。
? を付けずに null を代入するとエラーになります。
var s:String? = null
//var s:String = null // error: null can not be a value of a non-null type String
Null許容型の変数のプロパティやメソッドを使用する場合は、「?.」や「!!.」を付けます。
「?.」と「!!.」の違いは、null を返すか実行時にエラーにするかです。
var s:String? = "12345"
//println(s.length) // error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
println(s?.length) // 5
println(s!!.length) // 5
s = null
println(s?.length) // null
println(s!!.length) // 実行時エラー:kotlin.KotlinNullPointerException
また、null 以外の値が入っていることが保証されている場合には、「?.」や「!!.」を付けなくても問題ありません。
var s:String? = "12345"
if (s != null) {
println(s.length) // 5
}
6. 変数の初期化
変数は宣言時に初期化する必要はありませんが、使用する前までには必ず初期化する必要があります。
初期化していない変数にアクセスすると、エラーになります。
Null許容型でもエラーになります。
初期化していない変数にアクセスすると、エラーになります。
Null許容型でもエラーになります。
val s:String?
println(s) // error: variable 's' must be initialized
7. 他の数値型への変換
他の言語と異なり、数値型同士の型変換でも、メソッドを使う必要があります。
Int から Long へ変換する際も、ただ代入するとビルドエラーになります。
変換する場合は、toLong() など、各数値型に変換するメソッドを使用します。
Int から Long へ変換する際も、ただ代入するとビルドエラーになります。
var v1:Int = 1
var v2:Long = v1 // error: type mismatch: inferred type is Int but Long was expected
println(v2)
変換する場合は、toLong() など、各数値型に変換するメソッドを使用します。
var v1:Int = 1
var v2:Long = v1.toLong()
println(v2) // 1