Scalaの使い方

 

こんにちはKUJIRAです。今日はScalaの使い方についてメモを残します。Scalaには以下のような使い方があります。

 

  1. Scalaコンソールによる実行
  2. Scalaスクリプトによる実行
  3. Scalaのプログラムを作成してコンパイルし実行する方法

 

これらについて、今回はHello worldを元にそれぞれの違いや特徴を見ていきたいと思います。プログラムの内容は「Hello」と「world」の文字列を各変数に入れてそれを連結し表示するというもので、それぞれどういう風に違うのかを着目してくれればと思います。

 

Scalaコンソールによる実行
Scalaにはまず、Scalaコンソールを使用してプログラムを実行する機能があります。Scalaコンソールのインストール方法はこちらを確認してください。

 

インストールが終了したら、起動方法は以下のようにします。

 

$ scala
Welcome to Scala version 2.9.2 (OpenJDK 64-bit Server VM, Java 1.7.0_71).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

 

起動が完了したらプログラムを組んでいきます。

 

scala> val hello = "Hello"
hello: java.lang.String = Hello

scala> val space = " "
space: java.lang.String = " "

scala> val world = "world!"
world: java.lang.String = world!

scala> println(hello + space + world)
Hello world!

 

以上のようにコンソール一つ一つに変数定義や出力などを書き込み対話式で行っていきます。一つずつ見ていきます。

 

まず、「val hello = “Hello”」で変数「hello」に文字列「Hello」を代入します。結果に「hello: java.lang.String = Hello」と出ているのがどの型のなんていう変数にどういう文字列が入っているのか、というところを表しています。

 

次の変数「space」と「world」も同じです。

 

そして最後に「println(hello + space + world)」という文で文字列を連結して出力しています。以上のように一見コンソールっぽく見えますが、ちゃんとした処理をしているのがわかります。

 

Scalaスクリプトによる実行
Scalaはスクリプトとしても実行することができます。以下のファイルを作ってみます。

 

$ vi helloworld.scala

########### 以下、ファイルの中身 ###########

val hello = "Hello"
val space = " "
val world = "world!"
println(hello + space + world)

############################################

 

ファイルを作成したら以下のようにして実行します。

 

$ scala helloworld.scala
Hello world!
$

 

上のように実行すると、スクリプトを実行してくれます。しかし、コマンド入力から実際の実行開始まで少し時間がかかるのが特長です。多分コンパイルとか走っているのかな?たぶんこれを使うなら普通にPerlとか使ったほうがいいかもしれないですね。実戦向きじゃありません。

 

記述自体は先ほどコンソールに打ち込んだものを列挙している感じです。対話型かそうじゃないかの違いぐらいしかありません。なので、コンソールが使えたら比較的スムーズに記述はできるようになります。たぶんスクリプト書く際の動作確認でコンソールを使う。。。とかそんな感じの使い方になるのだと思います。

 

Scalaのプログラムを作成してコンパイルし実行する方法
ソースコードを作成後コンパイルを行う方法です。たぶんこれが一番使う方法だと思います。というかこれを使ってフレームワークとか使うためにScalaを勉強している人もいるのではないでしょうか?

 

まずはソースコードを作りましょう。

 

 

そしたら以下のコマンドを実行します。

 

$ scalac HelloworldProgram.scala
$ scala HelloworldProgram
Hello world!

 

以上です。「scalac HelloworldProgram.scala」というコマンドでコンパイルをしています。javacと似た感じです。。。というかそれを意識しているんじゃないかな。。。

 

コンパイルが終わったら、「scala HelloworldProgram」でコンパイルによって作成されたclassファイルを実行します。ここでポイントとなるのはコンパイル時に作成されるのがclassファイルということです。よって実行はJVM上で実行します。ここが他の言語と少し違うところではないでしょうか。Javaのマルチプラットフォームの考え方をそのまま使えます。

 

ソースコードに目を向けると先ほどのコンソールの時や、スクリプトの時とは一転して記述方法が違っております。

 

まずそもそも書き出しとして「object HelloworldProgram {」から始まり、続いて「def main(args: Array[String]) {」となっています。これは、1行目の「object HelloworldProgram {」でシングルトンオブジェクトというものを生成し、その後スタティックメソッドであるmainメソッドを記述しています。シングルトンオブジェクトについては後日ちゃんと勉強して書きます。

 

後の中身はコンソールやスクリプトと同じです。ただ、実行時のメモリの使い方とかそこらへんはスクリプトとシングルトンオブジェクトで違うような気がします。。。当てずっぽうですがwww

 

とまぁ、こんな感じで見ましたが、これら3つのやり方を適材適所でやれば便利に使えそうです。ただ、ほとんどスクリプト的な使い方と、プログラム的な使い方がほとんどでコンソール上での使用はプログラムがちゃんと動作するかの確認程度でしょう。これらを使ってこれからプログラムを組んでいけたらなぁと思います。KUJIRAでした。