Scala IDE で遊んでみる
前回はコマンドラインで scala に軽く触ってみたところですが、今回は IDE で Scala を使ってみようと思います。
Scala 用の IDE としては、おなじみ IntelliJ IDEA と Scala IDE があるようです。Scala IDE は Eclipse ベースの Scala 開発用ワークセットで、今回は Scala IDE のほうを使ってみます。
開発環境は例によって Linux (Fedora release 26) です。
Scala IDE のインストール
公式サイトから Scala IDE をダウンロードします。
現時点での最新バージョンは 4.7.0 Release でした。
ダウンロードしたら展開して、でてきた eclipse ディレクトリを適当な場所に置いておきましょう。$ tar xvfz scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz
展開してできた eclipse ディレクトリ内の実行バイナリ eclipse を実行すると Scala IDE が起動します。
Eclipse をベースにしているだけあって、基本的な使い方は Eclipse と同じですね。
同じ環境で Java を Eclipse で開発している場合には、実行バイナリの eclipse 自体を別名にリネームしたり、メニューに登録する際に Scala IDE というような名前をつけておいたり、ワークスペースを Java 用 eclipse のワークスペースとは別の場所にしておいたりするとうまく住み分けができると思います。
続きを読む
Scala
コメント (0) 2018/02/08 20:19:52
Scala で遊んでみる
最近私のまわりでも Scala について耳にすることが増えてきましたが、私自身はこれまであまり触ったことがなかったので、少し試してみることにしました。
Scala については、関数型であることや並列処理に特化していることによく触れられています。JVM 上で動作することもあって Java の影響を強く受けていて、型安全性やオブジェクト指向言語であること、Java との親和性なども特徴としています。
最初の 1 歩ということで、Scala 言語そのものについて調べてみるというよりは、実際に動かすところまでを目標に置いてみました。
Scala を実行する
まずは言語標準の scala コマンドから Scala コードを動かしてみます。手順は以下の通りです。
Scala のインストール
前提として Java 8 以上が必要になるので、別途インストールしておきます。
その後は yum コマンドから Scala をインストールしましょう。
# yum install scala
インストール後に scala コマンドが実行できれば OK です。$ scala -version
Scala code runner version 2.10.6 -- Copyright 2002-2013, LAMP/EPFL
scala コマンドで実行する
以下の内容のソースコード factrization.scala を作成します。import scala.collection.mutable.ArrayBuffer
object Factorization {
def main(args: Array[String]): Unit = {
val random = scala.util.Random
val numbers =
if (args.isEmpty) {
// 引数で素因数分解する数値が指定されていなければ、10 個の乱数を生成する
(1 to 10).map(i => random.nextInt(Int.MaxValue))
} else {
// 引数の数値を素因数分解する
// Array 型を Vector 型に変換する
args.map(i => i.toInt).to[collection.immutable.Seq]
}
println("numbers: " + numbers.mkString(", "))
// 並列化せずに素因数分解し、その処理時間を計測する
logProcessingTime("Serial ", numbers.map(i => factorize(i)))
// 並列化して素因数分解し、その処理時間を計測する
logProcessingTime("Parallel", numbers.par.map(i => factorize(i)))
}
// 引数の数値を素因数分解し、素数のリストを返す
private def factorize(number : Int) : List[Int] = {
val list = new ArrayBuffer[Int]
var n = number
var f = 2
while (n != 1) {
if (n % f == 0) {
list += f
n /= f
} else {
f += 1
}
}
println("Thread:%3d factorize %10d to %s".format(Thread.currentThread.getId, number, list.mkString(", ")))
list.toList
}
// 第二引数の式を処理し、その処理時間を出力する
private def logProcessingTime(label: String, process: => Unit) = {
val start = System.currentTimeMillis
process
println(label + ": " + (System.currentTimeMillis - start) + "ms")
}
}
続きを読む
Scala
コメント (0) 2018/01/23 20:15:05