変数
変数定義は以下の通りだ。値の再設定を許す「var」と許さない「val」がある。
それぞれ定義時のパターンを記述してみた。
null許容止めたい!
nullを許容した変数を取り扱う際には常にnull判定を意識し記述しなければいけない。面倒だ・・・。絶対にnullにならないなら許容すべきでない。
しかしどーしてもnull許容必須の場面が出てくる。例えば戻り値にnullを想定している関数を使う時だ。この場合は戻り値を受け取る変数をnull許容にしなきゃいけない。絶たぃーーーにnullになるような引数渡さないから・・・と言っても許してくれない。
そんな時のためにnull許容からnull不可に変える命令が用意されている。!!だ。変数の次に!!と記述するとnull不可になるのだ。
配列
Kotlinでの配列定義は複数方法あるようだ。まず簡単と思われる「arrayOfNulls」を使う
String型の3つの配列を定義する場合は次のようになる。
1 |
var a = arrayOfNulls<String>(3) |
「arrayOfNulls」の定義ではnull許容になってしまう。避けたい場合は「emptyArray」を利用する。
サイズ指定ができないため次の「arrayOf」で初期値設定しなければいけない。
初期値を設定した場合は「arrayOf」を利用する。
次のように記述する。
1 |
var b = arrayOf("A", "B", "C") |
せっかくなのでループ分を用いて内容を表示したいところだ。便利そうな命令「forEach」があったので、使ってみる。
配列変数bの内容を表示する。
1 2 3 4 |
var b = arrayOf("A", "B", "C") b.forEach { Log.d("MainActivity","b="+it) } |
1 2 3 |
D/MainActivity: b=A D/MainActivity: b=B D/MainActivity: b=C |
ここまでくるとインデックスも表示したいところだ。いい命令があった。「forEachIndexed」だ。
これを利用し配列変数のインデックス、内容を表示する。
1 2 3 4 |
var b = arrayOf("A", "B", "C") b.forEachIndexed { index, element -> Log.d("MainActivity","b[$index]=$element") } |
1 2 3 |
D/MainActivity: b[0]=A D/MainActivity: b[1]=B D/MainActivity: b[2]=C |
3行目で「文字列テンプレート」というテクニックを使っている。これは文字列の中に「$変数名」と記述することにより、変数の内容が文字列として扱える。地味な機能だが大変便利だ。
3 |
Log.d("MainActivity","b[$index]=$element") |
二次元配列
最後に二次元配列も確認しておきたいのだが、これが難解であった。まず二次元配列の定義は「Array」命令で行う。
Array命令は二次元配列に特化した命令ではなく次のように一次元配列の定義もできる。
1 2 3 4 |
var g = Array(3, {9999998}) g.forEachIndexed { index, element -> Log.d("MainActivity","g[$index]=$element") } |
1 2 3 |
D/MainActivity: g[0]=9999998 D/MainActivity: g[1]=9999998 D/MainActivity: g[2]=9999998 |
二次元配列3×3の配列作成は次のようになる。
1 2 3 4 5 6 7 8 |
var f = Array(3, {arrayOfNulls<String>(3)}) //null不可にしたい場合は、 var f = Array(3, {emptyArray<String>()}) //サイズ指定ができないので、次のように初期化が必要 f[0] = arrayOf("1", "2", "3") f[1] = arrayOf("4", "5", "6") f[2] = arrayOf("7", "8", "9") |
二次元配列で初期値を設定する場合だarraOfをネストさせることで実現できた。
1 2 3 4 5 6 7 8 9 10 |
var f = arrayOf( arrayOf("1", "2", "3"), arrayOf("4", "5", "6"), arrayOf("7", "8", "9") ) f.forEachIndexed { index, element -> element.forEachIndexed{index2,element2-> Log.d("MainActivity","f["+index+"]"+"["+index2+"]="+element2) } } |
1 2 3 4 5 6 7 8 9 |
D/MainActivity: f[0][0]=1 D/MainActivity: f[0][1]=2 D/MainActivity: f[0][2]=3 D/MainActivity: f[1][0]=4 D/MainActivity: f[1][1]=5 D/MainActivity: f[1][2]=6 D/MainActivity: f[2][0]=7 D/MainActivity: f[2][1]=8 D/MainActivity: f[2][2]=9 |
さて次回はいよいよクラスを学習する。あまり深入りせずにさらっと完了したいものだ。