RSS2.0

Scala IDE で遊んでみる

前回はコマンドラインで scala に軽く触ってみたところですが、今回は IDE で Scala を使ってみようと思います。
Scala 用の IDE としては、おなじみ IntelliJ IDEA と Scala IDE があるようです。Scala IDE は Eclipse ベースの Scala 開発用ワークセットで、今回は Scala IDE のほうを使ってみます。
scalaIDE01.png
開発環境は例によって 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
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2018, 8>>
2930311234
567891011
12131415161718
19202122232425
2627282930311