Scala 手習い

こんにちは、鈴木です。

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!

 

Comments are closed, but you can leave a trackback: Trackback URL.