Scala をはじめよう
Scala とは?
プログラミング言語の1つ。
「オブジェクト指向」と「関数型プログラミング」の両方の性質を併せ持つ、というか、実現できるというか、両方できる二刀流。
Scala
は scalable language (拡張可能な/拡張可能性の高い 言語)
に由来する。
Scala の「良さ」
- オブジェクト指向と関数型プログラミングの両方を表現できる。
- オブジェクトの「不変性」が意識された設計
- 高いモジュール性
- Java と互換性がある (Java のライブラリを使うことができる)
- 非同期の計算ができる
Future
ライブラリを標準装備 - 並列・分散プログラミングのためのライブラリ
Akka
がある
インストール on Mac
Homebrew
を使うのが簡単だと思う。
環境構築は全部こいつでなんとかなる(気がする)。
探す
# scala (本体, しかし前提として Java が動く環境が必要 - 後述)
$ brew search scala
==> Formulae
scala scala@2.11 scala@2.12 scalaenv scalapack scalariform scalastyle
==> Casks
scala-ide
# sbt (scalaのビルドツール, 色々するのに便利なやつと思えば良い)
$ brew search sbt
==> Formulae
sbt sbt@0.13 sbtenv
(前提として) Java をインストール
やはりHomebrew
を使う。
AdoptedOpenJDK
をインストールするのが良いっぽい。
AdoptedOpenJDKはJava大好きコミュニティ()により提供されているOpenJDKのバイナリ(だと思っている)。
Oracle経由でのインストールが、アカウント登録とか、自分でフォルダ配置するとか面倒になったので、変にこだわるよりは、これでサクッと入れてしまうのがコスト低いと思う...
# リポジトリの追加
$ brew tap AdoptOpenJDK/openjdk
# search
$ brew search openjdk
# install
$ brew cask install adoptopenjdk11
JAVA_HOMEのPATHを設定しよう
java_home
コマンドでインストールされたディレクトリの場所を確認
$ /usr/libexec/java_home -v 11
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
$ なんたら/java_home -v 11
して出てきた文字列を、環境変数JAVA_HOME
としてPATH
に追加
必要に応じて .bash_profile
や .bashrc
などに記述する。
# .bashrc に書いた。
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
PATH=${JAVA_HOME}/bin:${PATH}
設定ファイルの再読み込み
# 以下、どちらか一方でOK
source ~/.bashrc
exec $SHELL -l
一応、チェックする。
$ java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.7+10, mixed mode)
$ javac -version
javac 11.0.7
# コンパイル例
$ javac source.java
# 実行例 (.class を含めないように注意)
$ java Source
scala を入れる
(後述の)sbt
だけでも良いが、一応書いておく。
# install
$ brew install scala
以上。
使ってみる
# REPL起動
$ scala
Welcome to Scala 2.13.3 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.
scala>
例
// 出力
scala> println("Hello scalalala")
Hello scalalala
// 演算1
scala> 1 + 2
val res1: Int = 3
// 演算2
scala> 3 * 6
val res2: Int = 18
// 演算3
scala> 8.0 / 2.0
val res3: Double = 4.0
// 終了
scala> :quit
// scala> :q でも OK
ソースファイル
拡張子は.scala
object Main {
def main(args: Array[String]): Unit = {
println("Hello scala program")
}
}
- コンパイルして実行
$ scalac Main.scala
$ scala Main
- コンパイルしないで実行
$ scala Main.scala
- REPLから実行
$ scala
Welcome to Scala 2.13.3 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.
scala> :load Main.scala
sbt を入れる
# install
$ brew install sbt
以上。
使ってみる
# REPL起動
$ sbt console
...
[info] Starting scala interpreter...
Welcome to Scala 2.12.10 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.
scala>
(あとは同じなので詳細略)
sbt でコンパイル, 実行
下準備として、何かフォルダを作っておくと良いと思います。
(名前はmyfolderとしましたが、なんでも良いです、対応する部分は読み替えてください)
$ mkdir myfolder
$ cd myfolder
myfolder下にソースファイルを書いて置きます。
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, Scala World!")
}
}
myfolder下にsbt
の設定ファイルを置きます
scalaVersion := "2.12.10"
scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-Xlint")
sbt
を起動
[info] ...
sbt:myfolder>
run
コマンドで実行
sbt:myfolder> run
[info] Compiling 1 Scala source to ...
[info] Running HelloWorld
Hello, Scala World!
[success] Total time: 1 s, completed 2015/02/09 15:44:44`
run
コマンドでは、mainメソッドを持つオブジェクトを探して実行してくれるらしい。
というか、なんか日付がおかしい...??