はじめての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改造日記にすることにした。