はじめてのScala その4 Hello, world! を改造して学ぶ
今回はJavaとの連携 + α でいこうと思う。
ということで、前回のHelloWorldをちょこっと改造。
object Main { def main(args: Array[String]) { var hello:HelloWorld = new HelloWorld() hello.hello() } } class HelloWorld { def hello() { System.out.println("Hello, World!") } }
これを hello.scala という名前で保存し、コンパイルして実行。
> scalac hello.scala > scala Main Hello, World!
ここから次のことがわかる。
- Javaのようにクラス名とファイル名は一致させなくてよい
- 1つのクラスに複数のpublicクラスを記述することが可能
- java.langに所属するJavaクラス(この例だとjava.lang.System)は特別なことをしなくても呼び出せる
これだと面白くないので、今度はjava.lang以外のクラスを呼びだすコードを書く。
import java.util.Date object Main { def main(args:Array[String]) { var hello:HelloWorld = new HelloWorld hello.hello } } class HelloWorld { def hello() { System.out.println(new Date()) } }
Javaのクラスを呼び出すのは普通に import文。Javaと違うのは最後のセミコロンがないくらいだ。
これをコンパイルして、次のように実行。
> scalac hello.scala > java -classpath "%SCALA_HOME%\lib\*";. Main Mon Jun 02 23:11:22 JST 2008
というわけで、Scalacでコンパイルしたクラスはjavaコマンドで実行できることがわかる。
これはコンパイル後のディレクトリを除いてみれば明白。
> dir hello.scala HelloWorld.class Main$.class Main.class
要するに、scalacはScalaプログラムをJavaのクラスファイルにコンパイルしているのだ。
これをみれば、「JVM上で動く」ことや「Javaとほぼ実行速度が同じ」というのも納得できるものだ。
HelloWorldを少しいじっただけでもScalaという言語の特徴がわかって少し面白い。
このお題でもう少しかけそうなので、明日も引き続きHelloWorld改造日記にすることにした。