/var/log/messages

debugging with sixth sense

Kotolin メモ

前回の続き。4.3 のトレイトと抽象クラス から、という事で。

  • trait は具象関数を含んだ interface
  • abstract なクラス定義も可能

  • Kotlin は移譲をサポートしている

む、これ面白いな。

1
class Person(g : Greeter) : Greeter by g

という記述にてこうした時に

1
2
var greeter = GreeterImpl("world")
var person = Person(greeter)

Person では

1
2
3
  fun greet() {
    g.greet()
  }

が追加されている、ということなのか。

クラスオブジェクト

  • static なメンバという概念はなくてクラスオブジェクト、というものを使う模様。
  • スーパータイプが設定できる

匿名クラス

以下な記述とのこと。

1
2
3
4
5
6
7
trait Foo {
  fun foo() : String
}

val bar = object : Foo {
  override fun foo() = "bar"
}

object declaration

以下が singleton なオブジェクトを使う例、とのこと。

1
2
3
4
5
6
7
8
9
10
11
trait Foo {
  fun foo() : String
}

object Bar : Foo {
  override fun foo() = "bar"
}

fun main(args : Array<String>) {
  println(Bar.foo()) // bar
}

ジェネリクスのあたり、ちょいスルーで。

リストの操作

Lisp な感じでの操作が可能になっているようですね。

  • any, all は (T) –> Boolean な手続きを引数にいずれか、あるいは全ての要素について true を戻すかを戻す
  • それぞれの要素は it で参照できるのか
  • filter や map も使える

以下が例示されている。

1
2
3
4
5
val ints = linkedList(1, 2, 3, 4, 5)

val filterdInts = ints.filter {
  it % 2 == 0
}

ints には 2 の倍数しか残らないはず。Lisp てきに書くと

1
(filter ints (lambda (it) (= 0 (% it 2))))

みたいなカンジなのかどうか。あと、python な enumerate みたいな withIndices という関数があるようです。以下なナニが例示されています。

1
2
3
4
5
6
7
val list = linkedList("foo", "bar", "baz");
  
for(val p in list.withIndices()) {
  assert(p is #(Int, String))
    
  println("${p._1} : ${p._2}")
}

これは面白い。fold および foldRight は略します。

とりあえず

Kotlin おさらい終わったみたいなので、RxJava 方面をおさらいしてみる方向にて。

Comments