算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

KotlinというJVM言語が面白そうだよ〜

今更ながら(?)Kotlin(コトリン)というプログラミング言語に興味を持ったので調べています。

参考サイト:Welcome - Kotlin - Confluence

Kotlinは去年の7月に発表された言語で

という特徴を持っています。

上記参考サイトによると、Kotlinのデザインゴールは

  • Javaとの互換性をもった言語を作ること
  • コンパイルの速さが少なくともJavaと同等
  • Javaより安全に。よくある落とし穴(NULLポインタへの間接参照のような)の静的なチェック
  • Javaより簡潔に。型推論、クロージャ、extension functionsなどのサポートにより実現
  • 有用な表現力を維持しつつ、最も成熟した競合(Scala)よりもシンプルに

てな感じです。

今のところ、コンパイラはありません。
コンパイラはIntelliJ IDEA(JetBrains製のIDE)と並行して開発されているそうです。
上記参考サイトによると、去年の暮れに最初のバージョンを出す予定だったらしいですが、出ていません。
Kotlinプロジェクトのブログ1月4日の記事で大きな構文の変更が発表されたので、コンパイラ登場までもう少しかかりそうです。

Kotlinは名前もロゴもかわいいし、興味深い機能をたくさん持った言語なので、今後非常に注目される言語になるのではないでしょうかっ!!?

最後に、これだけではつまらないと思うのでコード例を。
まだまだKotlinについて知らないことだらけですが、FizzBuzz書きました(* ̄∇ ̄*)

fun main(args : Array<String>) {
  for(i in 1..10) {
    if(i.isFizz()) {
      print("Fizz")
    }
    
    if(i.isBuzz()) {
      println("Buzz")
    } else if(i.isFizz()) {
      println()
    } else {
      println(i)
    }
  }
}

fun Int.isFizz() : Boolean {
  return this % 3 == 0
}

fun Int.isBuzz() : Boolean {
  return this % 5 == 0
}

修正(2012-01-14 0:14)
Kotlinの機能をできるだけ多く使ったバージョンです。

fun main(args : Array<String>) {
  iterate(1..100) { 
    val strBuilder = StringBuilder()
    if(it.isFizz()) {
      strBuilder += "Fizz"
    }
    if(it.isBuzz()) {
      strBuilder += "Buzz"
    }
    if(strBuilder.length() == 0) {
      strBuilder += it.toString()
    }
      
    val str = strBuilder.toString()
    System.out?.println(str)
  }
}

//Higher-order function
fun iterate(range : IntRange, function : (n : Int) -> Unit) {
  for(n in range) {
    function(n)
  }
}

//Single-expression functions
//Extension functions
fun Int.isFizz() = this % 3 == 0
fun Int.isBuzz() = this % 5 == 0

//Operator overloading
fun StringBuilder.plusAssign(obj : Any) {
  this.append(obj)
}