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

| | コメント(0)

前回は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とかにとって微妙に便利っぽいですね。

コメントする

著者について

高井直人
高井 直人
takai@recompile.net

ソフトウェアエンジニア。1977年横浜生まれ。大学在学中からネットワークや情報技術にたずさわる。Web制作会社などを経て、現在はシステムインテグレータに勤務。エンタープライズRubyをテーマに社内標準の策定などに従事している。

タグクラウド

ウェブページ

Powered by Movable Type 4.1-en-release-26-r1141-20080104