Scala 例 実行 Hello, World

インストールはこちら、
Scala 開発環境を準備する - kaishitaeiichiの日記
scalaコマンドにpathをとおすまで。

REPLでかんたんに実行

Javaとちがうのは、コンパイルしなくても、実行できるところ。コンソールにちびっと処理を書いて、実行しながら作業できる。REPLは、read-eval-print loopの略。


$ scala
Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

scala> println("Hello, World!")
Hello, World!

scala> 1 + 2
res0: Int = 3

scala> "abcd".substring(1,3)
res2: java.lang.String = bc

scala> import java.util.ArrayList
import java.util.ArrayList

scala> val list = new ArrayList()
list: java.util.ArrayList[Nothing] = []

scala> list.add("a")
:8: error: type mismatch;
found : java.lang.String("a")
required: Nothing
list.add("a")
^
scala> val list = new ArrayList[String]()
list: java.util.ArrayList[String] = []

scala> list.add("a")
res4: Boolean = true

scala> list.contains("a")
res6: Boolean = true

scala>

上のリストは、Javajava.util.ArrayListScalaでは、それとはぜんぜん別のもっと便利なコレクションライブラリ、scala.collection.immutable.Listなどがある。Scala 例 List - kaishitaeiichiの日記

なにげに、ScalaでなくてJavaAPIもかんたんに実行できるのは、便利かも。自分は、APIの挙動をしらべるときに、かんたんなTestCaseをつくってしまうことのほうが多いが。

余談だが、Rubyにも、irbがあったなー。しばらく前に読んだメタプログラミングRubyでは、オブジェクトの様子を調べるのにirbが大活躍だった。RailsのcosoleコマンドとかirbでActive Record使えて余計、便利に感じた。

余談だが、Visual Studio F#のREPLもかなりいい感じだった。プログラミングF#のはじめにちらっと使い方が書いてある。エディタとREPLをいったりきたりしながら、リズム良く作業できる感じだった。

scalaの場合もREPLは大活躍なんだろうか。

スクリプトファイルを読み込んで実行

下のように、ファイルにスクリプトを書いて実行することもできる。


$ vi HelloWorld.scala
println("Hello, World")

$ scala HelloWorld.scala
Hello, World

Javaっぽくコンパイルして実行

ファイルをコンパイルして実行することももちろんできる。
Redirecting…

$ vi HelloWorld.scala
object HelloWorld {
def main(args: Array[String]) {
println("Hello, World")
}
}

$ scalac HelloWorld.scala
$ ll
合計 36
drwxr-xr-x 2 eiichi eiichi 4096 2011-02-20 22:35 ./
drwxr-xr-x 6 eiichi eiichi 4096 2011-01-26 22:44 ../
-rw-r--r-- 1 eiichi eiichi 605 2011-02-20 22:35 HelloWorld$.class
-rw-r--r-- 1 eiichi eiichi 640 2011-02-20 22:35 HelloWorld.class
-rw-r--r-- 1 eiichi eiichi 97 2011-02-20 22:35 HelloWorld.scala
$ scala HelloWorld
Hello, World

  • javacコマンドがsalacコマンド
  • javaコマンドがscalaコマンド

に置き換わっただけなので、Java知っている人はすぐにわかりそう。