こんにちは、鈴木です。
Scala やってみようかな、という方へのエントリです。
コードと実行結果を多めに載せましたので、ぜひお手元で実行しながら読み進めていただけたらと思います。
Scala のインストール
Scala の公式サイトから Scala をダウンロードしましょう。
現時点での安定版の最新バージョンは 2.9.2 です。
展開してパスを通すなどすれば準備完了です!
Hello Scala!
以下のコードは「Hello Scala!」と表示する Scala コードです。
以下のような特徴があります。
- println メソッドで標準出力に出力することができます。
- Java と同じく、文字列はダブルクォート(")で囲みます。
- Java と異なり、文末のセミコロン(;)は不要です。
Scala プログラムの実行
Scala のプログラムは、インタプリタとして実行することも、コンパイルして実行することもできます。
scala コマンドは Scala のインタプリタ、scalac コマンドは Scala のコンパイラです。
scala コマンドで対話的に実行する方法
scala コマンドを引数無しで実行すると、対話的にプログラムを入力・実行することができます。
いわゆる REPL(Read-Eval-Print Loop)です。
REPL では入力したプログラムがすぐに評価・実行・結果の印字が行われます。
手軽に実行結果を確認することができるので、非常に便利です。
scala コマンドの -e オプションでプログラムを指定する方法
scala コマンドの -e オプションで Scala プログラムを指定することができます。
ワンライナー向けの実行方法と言えます。
Scala でワンライナーを書くことは少ないと思いますが、何かの拍子で使うかもしれません。
scala コマンドでファイルに保存したプログラムを実行する方法
事前に Scala プログラムをファイルに保存しておき、それを scala コマンドで実行することができます。
コンパイルは行われず、インタプリタとして実行されます。
まず、「Hello.scala」という名前のファイルを作成し、以下の内容を記述します。
そして、scala コマンドで実行します。
scalac コマンドでコンパイルし、scala コマンドで実行する方法
まず、「Hello.scala」という名前のファイルを作成し、以下の内容を記述します。
次に、scalac コマンドで、作成した「Hello.scala」をコンパイルします。
コンパイルに成功すると、「Hello$.class」と「Hello.class」が作成されます。
scala コマンドで実行します。
Scala のファイルは Java のクラスファイルなので、java コマンドで実行することもできます。その場合は Scala のライブラリをクラスパスに指定します。
コメント
単一行コメント
単一行コメントは // から始めます。行末までがコメントとして扱われます。
複数行コメント
複数行コメントは /* で開始し、*/ で終了します。
変数
宣言
変数は val または var で宣言します。Scala の持つ型推論により、変数の型を明示指定する必要はありません。
変数の型を明示的に指定することもできます。
再代入(mutable / immutable)
val で宣言した変数は再代入することができません。
var で宣言された変数には再代入することができます。
通常は val を使用し、再代入が必要な場合のみ var を使うと良いでしょう。
リテラル
リテラルの種類
リテラルには以下のような種類があります。
- 整数
- 不動小数点数
- 論理値
- 文字
- 文字列
- シンボル
- XML
整数
Int 型のリテラルは以下のように記述します。
Long 型のリテラルは末尾に l または L を付加します。
不動小数点数
Double 型のリテラルは以下のように記述します。
Float 型のリテラルは以下のように記述します。
不動小数点数は指数表記で記述することもできます。
論理値
Boolean 型のリテラルは true または false です。
文字
Char 型のリテラルは以下のように記述します。
文字列
String 型のリテラルは以下のように記述します。
シンボル
Symbol 型のリテラルは以下のように記述します。
XML
XML リテラル(scala.xml.Elem 型のリテラル)は以下のように記述します。
XML リテラルには変数の値を埋め込むことができます。
コレクション
コレクションの種類
以下のコレクションについて解説します。
- Range (範囲)
- List (リスト)
- Array (配列)
- Tuple (タプル)
- Map (マップ)
- Option (オプション)
Range
Range は範囲を表します。
Range は遅延型のコレクションです。遅延型のコレクションに含まれる要素は、実際にアクセスされるまでインスタンス化されることはありません。
「(1 to 2147483647)」は 1 から 2147483647 までの範囲を表しますが、「(1 to 2147483647).take(3)」では先頭の 3 要素のみを取り出しています。1 から 2147483647 までの整数がメモリ上に乗ることはありません。
List
リストは以下のように生成します。
Array
配列は以下のように生成します。
Tuple
タプルとは、データ型に関係なく、いくつかの値の組を表すデータ構造です。
コレクションの操作
foreach
foreach を使用すると、コレクションの各要素に対して指定したメソッドを適用することができます。
filter
filter はコレクションから特定の条件を満たす要素を抽出します。
filterNot
filterNot はコレクションから特定の条件を満たす要素を除外します。
map
map はコレクションの各要素に指定した関数を適用した結果を保持する新しいコレクションを生成します。
foldLeft
foldLeft は畳み込み処理を行います。例えば、1 から 10 までの整数の合計は求めるには、以下のように記述します。
Fizz-Buzz 問題
ScalaでFizz-Buzzを書くと次のようになります。
Enjoy Scala!
駆け足でしたが、Scalaの雰囲気を感じていただけたのではないでしょうか。
それでは、Enjoy Scala!