« A Scala Tutorial for Java programmers を淡々と写経するよ (1) | メイン | A Scala Tutorial for Java programmers を淡々と写経するよ (3) »

A Scala Tutorial for Java programmers を淡々と写経するよ (2)

前回はHelloWorldを実行するところまででした。今回は、Javaとの統合についてを扱います。

3 Interaction with Java

なにはともあれ、写経から始めましょう。

object BigFactorial {
  import java.math.BigInteger, BigInteger._
  
  def fact(x: BigInteger): BigInteger =
    if (x == ZERO) ONE
    else x multiply fact(x subtract ONE)

  def main(args: Array[String]) {
    val x = new BigInteger("100")
    println("fact(100) = " + fact(x))
  }
}

Javaとの統合についてですが、普通にimportが利用できるようです。とはいえ、見慣れないカンマやアンダースコアがでてきます。本文によると、これはScalaではアスタリスクをメソッド名などの識別子として利用できるため、その代替とのことです。

ということは、アンダースコアをメソッド名に利用できないのでしょうか。snake_caseも好きなので、これはなんだか納得できないところです。ちょっと修正したものを試してみましょう。……無事に動きますね。謎です。

import文は、カンマで続けて書くことができます。import A, Bとかけば、AとBをimportするということです。また、BigInteger._という表記はJava 5で導入された静的インポートと同じようです。

x == ZEROという表記があらわれますが、これは==がequalsのエイリアスとしてあつかわれるようです。==というメソッドであってもオブジェクトの同一性ではなく同値性を求めるわけです。

あ、==はメソッドとかいちゃいましたが、これは本当にメソッドらしいです。x.==(ZERO) という表記は x == ZERO としても書けるそうです。なんだかDSLとかにとって微妙に便利っぽいですね。

トラックバック

このエントリーのトラックバックURL:
http://recompile.net/apps/mt-tb.cgi/152

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年7月 4日 07:15に投稿されたエントリーのページです。

ひとつ前の投稿は「A Scala Tutorial for Java programmers を淡々と写経するよ (1)」です。

次の投稿は「A Scala Tutorial for Java programmers を淡々と写経するよ (3)」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。