Scalaプログラミング入門

Table of Contents

1 Scalaの概要

  • Martin Oderskyによる 関数型かつオブジェクト指向プログラミング言語
    • Java 1.1–1.4コンパイラの開発者
    • Pizzaの開発者 (Philip Wadlerと共同)
  • オープンソース
    • 活発に開発が行われている
  • 応用
    • Twitterの分散DBフレームワークGizzardはScalaで記述されている
    • Foursquare, Tumblr, LinkedIn, Amazon, VMWareなどでも利用されている
    • WebアプリケーションフレームワークとしてLift, Playなどがある
  • 言語の特徴
    • 関数型プログラミング言語とオブジェクト指向プログラミング言語の融合
    • 強力な型推論
    • 高階関数
    • Immutable Collections
    • Actorによる並行計算
  • 処理系の特徴
    • JVM(Java Virtual Machine)へのコンパイラ処理系
    • インタラクティブな実行環境(REPL)も用意されている
    • Javaのクラス・ライブラリをそのまま利用できる

1.1 注意

本Webページの作成には Emacs org-mode を用い, 数式等の表示は MathJax を用いています. IEでは正しく表示されないことがあるため, Firefox, Safari等のWebブラウザでJavaScriptを有効にしてお使いください. また org-info.js を利用しており, 「m」キーをタイプするとinfoモードでの表示になります. 利用できるショートカットは「?」で表示されます.

1.2 News!

Martin Oderskyが EPFLのMOOC でオンラインレクチャーを実施中! こんな機会はめったにない! ぜひ登録して勉強してみよう!

  • Functional Programming Principles in Scala
  • Functional Program Design in Scala

1.3 参考リンク

  • 書籍
    • Martin Odersky 他著: Scalaスケーラブルプログラミング,インプレスジャパン (Amazon)
    • デイビッド・ポラック 著: Scalaプログラミング入門,日経BP社 (Amazon)
    • Dean Wampler, Alex Payne 著: プログラミングScala,オライリー・ジャパン (O'Reilly)
    • 長瀬 嘉秀,町田 修一 著: オブジェクト指向プログラマが次に読む本—Scalaで学ぶ関数脳入門, 技術評論社 (Amazon)
    • 浅海 智晴 著: ボクらのScala—次世代Java徹底入門, ソフトバンククリエイティブ (Amazon)
    • Cay Horstmann: Scala for the Impatient, Addison-Wesley 2012.
    • Joshua D. Suereth: Scala in Depth, Manning, 2012.
  • 問題集

2 Scalaのインストール

2.1 Javaのインストール

Java 8がインストールされている必要がある.

2.1.1 Windows系OSの場合

「コマンド プロンプト」を開いて,以下のコマンドを実行し, バージョン1.8がインストールされていることを確認する.

> java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

2.1.2 Mac OS XおよびLinuxの場合

「ターミナル」を開いて,以下のコマンドを実行し, バージョン1.8がインストールされていることを確認する.

$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

2.2 Scalaのインストール

ここでは Version 2.12 系をインストールする.

2.2.1 Windows系OSの場合

  1. http://www.scala-lang.org を開き Download をクリックし,一番下のOther resourcesを見る.
  2. Version 2.12 系で現時点で最新の scala-2.12.5.zip をダウンロードする.
  3. パッケージを展開する.
    • 例えば C:\XXX というフォルダ内で展開したとする.
    • C:\XXX フォルダ内に scala-2.12.5 というフォルダが作成される.
  4. 「コンピュータ」を右クリックして「プロパティ」を開く.
  5. 「コンピュータの詳細設定」の「環境変数」を開く.
  6. 「ユーザ環境変数」に以下を登録する. (PATH環境変数の設定が既にあれば,値の最後に「;」を付けて追加する.)
    変数
    PATHC:\XXX\scala-2.12.5\bin

2.2.2 Mac OS XおよびLinuxの場合

  1. http://www.scala-lang.org を開き Download をクリックし,一番下のOther resourcesを見る.
  2. Version 2.12 系で現時点で最新の scala-2.12.5.tgz をダウンロードする.
  3. パッケージを展開する.
    • 例えば ~/XXX というフォルダ内で展開したとする (~ はホームディレクトリを表す).
    • ~/XXX フォルダ内に scala-2.12.5 というフォルダが作成される.
  4. PATH環境変数に ~/XXX/scala-2.12.5/bin を追加する.
    export PATH=/XXX/scala-2.12.5/bin:$PATH
    

以下はコマンドラインで上記のインストール作業を行う例 (情報基盤センターのiMacの場合)

$ cd ~
$ mkdir XXX
$ cd XXX
$ curl -O https://downloads.lightbend.com/scala/2.12.5/scala-2.12.5.tgz
$ tar xvzf scala-2.12.5.tgz
$ echo 'export PATH=~/XXX/scala-2.12.5/bin:$PATH' >>~/.profile
$ . ~/.profile
  • 2018年度言語工学の履修者は,上記の XXXtfpl2018 とすること.
  • 2018年度プログラミング言語論の履修者は,上記の XXXpl2018 とすること.

3 Scala REPLの利用

Scala REPLの利用方法を説明する.

  • REPLはRead Eval Print Loopの省略で,Scalaを対話的に利用するプログラムである.
  • REPLに入力した文は,コンパイルされてから実行されているため, 正確にはインタープリタではない.
  • 下で説明するように,カーソルキーやEmacsと同様のコントロールキーで入力の編集が行える.

3.1 Windows系OSの場合

「コマンド プロンプト」からscala.batと入力する.

> scala.bat
Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_162).
Type in expressions for evaluation. Or try :help.

scala> 1+2
res0: Int = 3

scala> (BigInt(1) to 100).product
res1: BigInt = 93326215443944152681......4000000000000000000000000
  • 最初の入力は,結果が出るまで少し時間がかかる.
  • 次の入力は,100の階乗を計算している.
  • REPL中ではカーソルキーで,以前の入力を再入力したり入力の編集ができる.
  • 終了は Ctrl-D あるいは :quit (コロンが必要)と入力する.

3.2 Mac OS XおよびLinuxの場合

「ターミナル」あるいは「端末」からscalaと入力する.

$ scala
Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_162).
Type in expressions for evaluation. Or try :help.

scala> 1+2
res0: Int = 3

scala> (BigInt(1) to 100).product
res1: BigInt = 93326215443944152681......4000000000000000000000000
  • 最初の入力は,結果が出るまで少し時間がかかる.
  • 次の入力は,100の階乗を計算している.
  • REPL中ではカーソルキーで,以前の入力を再入力したり入力の編集ができる.
  • 終了は Ctrl-D あるいは :quit (コロンが必要)と入力する.

Emacsと同様に以下のキーで編集が可能である( C- はCtrlキーを表す).

キー動作
C-p前の入力行へ移動 (↑と同じ)
C-n次の入力行へ移動 (↓と同じ)
C-b左の文字へ移動 (←と同じ)
C-f右の文字へ移動 (→と同じ)
C-a行頭へ移動
C-e行末へ移動
C-h左の文字を削除 (Backspaceと同じ)
C-d現在の文字を削除 (Deleteと同じ)
C-k行末までカット
C-yカットした内容をペースト
C-g入力取り消し
C-rインクリメンタルサーチ
Tab補完

4 Scalaコンパイラの利用

Scalaコンパイラを用いるには, まずScalaのソースファイルを作成する. 情報基盤センターのiMacの場合は,エディタとして mi などを利用すると良い.

まず,以下の内容のファイル Hello.scala を作成してみる.

1:  object Hello {
2:    def main(args: Array[String]) {
3:      println("Hello Kobe!")
4:    }
5:  }

Windows系OSでは,以下のようにコンパイルし,実行する.

> scalac.bat Hello.scala
> scala.bat Hello
Hello Kobe!

Mac OS XおよびLinuxでは,以下のようにコンパイルし,実行する.

$ scalac Hello.scala
$ scala Hello
Hello Kobe!

コンパイルせずに,REPL実行中にロードし実行することもできる.

scala> :load Hello.scala
Loading Hello.scala...
defined module Hello

scala> Hello.main(Array())
Hello Kobe!

その他,Scala開発ツールとして sbt あるいは Eclipse IDE 上のプラグインなどがあるが, ここでは詳細は紹介しない.

5 Scalaスクリプトの利用

実は,上の Hello.scala はscalacでコンパイルしなくても直接実行できる.

Windows系OSでは,以下のように実行する.

> scala.bat Hello.scala
Hello Kobe!

Mac OS XおよびLinuxでは,以下のように実行する.

$ scala Hello.scala
Hello Kobe!

6 Scalaプログラミング入門の内容

本Webページ上部のメニューから以下を参照できる.

  1. Scala言語の概要
  2. Scalaでリスト処理
  3. Scalaで再帰プログラミング
  4. Scalaで複素数計算
  5. Scalaで素数ものさしを探す
  6. Scalaでエラトステネスの篩
  7. Scalaで言語処理

また,本サイト内には以下のページがある.

6.1 練習問題

  1. 自分の興味のある応用分野でScalaが利用されているかどうか,検索してみよう.
    (解答例)

    https://github.com にもScalaを用いた多くのプロジェクトが公開されている.

Date: 2018-04-21 12:58:22 JST

Author: 田村直之

Validate XHTML 1.0