-->

Kotlin

forループ

forループは、他言語のforeachと同じようにiteratorを実装したオブジェクトで使用できる。

    val items = arrayOf("hoge1", "hoge2", "hoge3")

    for(item in items) {
        println(item)
    }

配列に対して、インデックスでアクセスするには、次のようになる。

    val items = arrayOf("hoge1", "hoge2", "hoge3")

    for(i in items.indices) {
        println(items[i])
    }

Whileループ

C言語と同じような感じだ。

    var i = 0

    while(i < 10) {
        println(i)
        i++
    }

    i = 0;
    do {
        println(i)
        i++
    } while(i < 10)

このエントリーをはてなブックマークに追加

まずは、if。ifは、C言語のif文と同じような使い方と、値を返す式としても使える。if文のような使い方は単に返す値を無視しているだけのような気もするw

C言語なんかと同じような書き方。

    var a = 10
    var b = 20

    if(a > b) {
        println("aの方が大きい")
    } else {
        println("bの方が大きい")
    }

if式

    var a = 10
    var b = 20

    var c = if(a > b) a else b
    println("c=${c}")

    var d = if(a > b) {
        println("aの方が大きい")
        a
    } else {
        println("bの方が大きい")
        b
    }
    println("d=${d}")

ブロックの最期の式の値が返る。また、式の場合は値を返さないってことはできないのでelseが必要になる。

when式

C言語のswitch文にあたるようなものだ。

    var a = 5

    when(a) {
        1 -> println("a = 1")
        2 -> {                                  // ブロックも書ける
            println("a = 2")
        }
        3, 4 -> println("aは、3か4")           // 複数の条件を与えるには ","で区切る
        in 5..10 -> println("aは5~10の範囲")    // 範囲指定もできる。この場合は、5以上で10以下。
        else -> {
            println("その他")
        }
    }

    // when式
    var b = when(a) {
        1 -> "aは1"
        else -> "aは1以外"
    }
    println(b)

whenもifと同じように式なんで値を返せる。


このエントリーをはてなブックマークに追加

Kotlinの変数はそのままではnullを代入できない。型の宣言の最期に?を付けることでnullの代入が可能になる。

    var str:String? = null

nullの代入を許す変数へのアクセスに?.を使うと変数がnullの場合nullを返してnullでない場合はその後に続くプロパティやメソッドを実行するように書ける。

    var str:String? = null
    println(str?.length)    // nullを表示

nullの場合、nullの代わりになにか値を返すには?:を使う。

    var str: String? = null
    println(str?.length ?: -1)      // -1を表示

nullの場合、例外を発生させ、null以外の場合はその値を返すには!!を使う。

    var str: String? = null
    println(str!!.length)      // 例外を発生

このエントリーをはてなブックマークに追加

配列はArray<T>クラスであらわされ、C言語などの配列と同じように[]で各項目にアクセスできる。配列の生成と初期化を行う場合、arrayOfを使う。

    var nums:Array<Int> = arrayOf(1, 2, 3)
    println(nums[0])    // 1を表示
    println(nums[1])    // 2を表示
    println(nums[2])    // 3を表示
    println(nums.size)  // 項目数(3)を表示

    var strs:Array<String> = arrayOf("abc", "def")
    println(strs[0])    // "abc"を表示
    println(strs[1])    // "def"を表示

配列の初期値が数列の場合、次のようにラムダ式を使って配列の生成と初期化ができる。

    // 偶数で初期化した配列(5個分)
    var evens = Array(5, {i -> i * 2})

    println(evens[0])   // 0を表示
    println(evens[1])   // 2を表示
    println(evens[2])   // 4を表示
    println(evens[3])   // 6を表示
    println(evens[4])   // 8を表示

プリミティブ型の配列を作る場合はByteArray、ShortArray、IntArrayなどを使う。これは、ボクシングオーバーヘッドのない配列が生成されるが、Array<T>の継承ではない。

    var nums:IntArray = intArrayOf(1, 2, 3)
    
    println(nums[0])    // 1を表示
    println(nums[1])    // 2を表示
    println(nums[2])    // 3を表示
    println(nums.size)  // 項目数(3)を表示

このエントリーをはてなブックマークに追加

あっ、大事なことを忘れていたw

コメントだ。

Javaなんかと同じように//で改行までのコメントと/* */でのブロックコメントに対応している。また、ブロックコメントはネスト可能になっている。


このエントリーをはてなブックマークに追加

↑このページのトップヘ