##Kotlinの変数宣言は?
2種類キーワードがある。
- val
- var
valキーワードで宣言した変数は一度値を割り当てした後に再度割り当てするのはできない。つまり、JAVAだったらFINALキーワードをつけて宣言した変数と同じ。
逆に、varで宣言した変数は何度も値の割り当てができる。
##Kotlinで変数を宣言してみよう!
var name: String = "Mori"
name = "Tanaka"
// セミコロンはつけてもいいし、つけなくてもエラーにならない
val age: int = 17
age = 30
// valで宣言した変数に2回も割り当てることはできないため、エラーになる
// int以外にもByte, Short, Long, Float, Doubleなども使える
##型の推論とは?
Kotlinでは変数の宣言し、型を明確に指定せずに宣言するのもできる。例えば、
var subject = "math"
upperCaseName = subject.toUpperCase()
上記のように型を指定しなかったsubject変数を宣言してもエラーにならない。subjectはコンパイラがコンパイルする際、変数の型をStringだと推論するため、toUpperCase()メソッドは正常に動作する。
実に便利そうだが、注意することもある。
var subject = "math"
subject.inc()
// コンパイルエラー発生
上記のコードで、String型に推論している変数subjectのメソッドincをコールしているが、incはString型には存在しないメソッドであり、コンパイル時エラーになってしまう。
##Nullable変数
初期値でNull値が持たないデータ型について、Null値を持つことを許可する変数
var grade: Strubg = Null
// コンパイルエラー発生
通常、上記で宣言するとエラーが発生するが、以下のようにNullable変数を宣言するとエラーが発生しない。
var grade: Strubg? = Null
// コンパイルエラーにならない
こうするとString型変数gradeにはNullかStringか2種類のデータを割り当てられる。
##条件分岐と変数宣言の結合
Kotlinでは変数の宣言とその値の割り当て(条件による)を一度の記述で全部解決できる。下はその例
int score = 93;
String grade;
if (score >= 95) {
grade = "A+";
} else if (score >= 90) {
grade = "A";
} else {
grade = "B+";
}
System.out.printLn(grade);
var score = 93
var grade: Strubg = if (score >= 95) {
"A+"
} else if (score >= 90) {
"A"
} else {
"B+"
}
println(grade)
これよりも簡単にもできる。
var score = 93
var grade = when { // 型推論により、Stringは記載しなくても大丈夫
score >= 95 -> "A+"
score >= 90 -> "A"
else -> "B+"
}
println(grade)
①と②と③は機能的には完全に同じ処理をするが、③のように圧倒的に可読性良いコードにも実装できる。
##参考
参考1