Scala触ってみた

一部で話題になっており、関数型の言語を一度触ってみたかったので、勉強がてら使ってみました。
今回は、チュートリアルを元に、導入と簡単なScalaプログラムの作成、Javaとの連携の方法をまとめます。

Scalaとは

スカラと読むそうです。防御力が上がりそうですね。
JavaRubyのようなオブジェクト指向言語LispHaskellのような関数型言語の中間にある静的型付け関数型言語です。
JVM上で動くので、Javaのライブラリを使うことができ、またコンパイルするとJavaのクラスとして実行することもできます。

導入

Java1.4 以降の環境が必要です。
Scala本体は以下のページからダウンロードできます。現在の最新バージョンは2.7です。

http://www.scala-lang.org/downloads/index.html

Windowsの場合、zipを落としてきて解凍し、binにパスを通して以下のコマンドが実行できればOKです。

C:\>scala -version
Scala code runner version 2.7.0-final -- (c) 2002-2008 LAMP/EPFL

プログラムを書いてみる

まずは、お決まりのHello World!から。以下のプログラムをHelloWorld.scalaと名前を付けて保存します。ちなみに日本語を使う場合はUTF-8で保存してください。

object HelloWorld{
	def main(args: Array[String]){
		println("Hello world!")
	}
}

コマンドプロンプトで以下のコマンドでコンパイル&実行します。

C:\scala>scalac HelloWorld.scala

C:\scala>scala HelloWorld
Hello world!


ScalaにはRubyirbのような対話型の実行環境もあり、scalaと入力すれば実行可能です。

Javaとの連携

Javaのパッケージを利用する

Javaのパッケージをインポートするには、

import java.util.List

のような感じで行えます。
同じパッケージ内のものを複数指定する場合は、

import java.util.{List, ArrayList}

のように書けます。
まとめてインポートするときは*ではなく

import java.util._

とアンダーバーを使います。
読み込んだクラスは

var list = new ArrayList[String]()
list.add("hoge");

のように違和感なく使うことが出来ます。
またクラスだけでなくメンバメソッドを読み込んで使うことが出来ます。

Javaプログラムとして実行する

scalacでコンパイルされて生成されるclassファイルはJavaのclassファイルと同じなので、ダウンロードしたScalaのフォルダのlib以下にあるscala-library.jarをクラスパスで指定すれば、Javaプログラムとして実行することが出来ます。

java -classpath .;C:\scala\lib\scala-library.jar HelloWorld

その他の特徴

  • 純粋オブジェクト指向言語なので、関数やJavaのintのようなプリミティブなものもオブジェクトとして扱う
  • 文末のコロンは必須ではない
  • staticなメンバは存在しない→シングルトンオブジェクトでメンバを定義する
  • オーバーライドするときは、明示的にoverride def hoge(){}とする

終わりに

とりあえず、今回はScalaの導入と簡単なプログラムの実行を行いましたが、これではJavaで書くのと大差ありません。チュートリアルでは、クロージャやケースクラス、パターンマッチなどが取り上げられているので、その辺りを使って、今後は関数言語らしい使い方をしてみたいと思っています。何か適当な課題があればよいのですが。
あと、Twitterにも書いたのですが、関数型言語は勉強用や研究以外で活躍している場というのがあるのでしょうか。どうせやるなら何かに使えると思うとやる気が出ますしね。