IntelliJ IDEAのScala Worksheet使ってScalaを効率的に学ぼう

どうも皆さん、こんにちは。
焼肉のときはビールよりもご飯で乾杯したい派、ムネリンです。
ちなみにScala界隈では糖質制限されている方が多いのであまりご飯、ご飯言ってると白い目でみられるかもしれないでご注意ください。(自分調べ)

皆さん、Scalaの開発、学習しているときに次のようなことにお困りじゃないですか?
私は困ってました。

Scalaを効率的に勉強したい!皆どうやってるんだろう?
ちょっとしたプログラムのデバッグ・動作確認でもコンパイル&動作確認がつらい
・でもREPLは使いたくない。IntelliJ IDEA使いたい。

はい、今日からそんなお悩みからは解放されます。

そう、「Scala WorkSheet」ならね!

何がどうなって楽かって?それは見てからのお楽しみ。では早速参ります。

39


下記がインストールされている前提で話を進めます。
・Typesafe Activator (sbt を含む)
・IntellJ Idea Community Edition

1. activatorを利用してScalaサンプルプロジェクトを作成します。

4. ここではminimal-scalaを選択しています。
$ activator new
Fetching the latest list of templates...

Browse the list of templates: http://typesafe.com/activator/templates
Choose from these featured templates or enter a template name:
  1) minimal-akka-java-seed
  2) minimal-akka-scala-seed
  3) minimal-java
  4) minimal-scala
  5) play-java
  6) play-scala
(hit tab to see a list of all templates)
> 4
Enter a name for your application (just press enter for 'minimal-scala')
>
OK, application "minimal-scala" is being created using the "minimal-scala" template.

2. IntelliJ IDEA起動 > Openを選択して先ほど作成したProjectフォルダを指定して開きます。

39


3. 左サイドメニューのProject上で右クリック > New > Scala Worksheetを選択します。
33



4. Worksheet名を入力します。
ここではStudyScalaにしておきます。これで準備完了です!
19



5. 早速Scalaを書いていきましょう。

試しにFizuBuzzをScalaで書いてみます。

// FizzBuzzを試しにScalaで書いてみる。
fizzBuzz

/**
 * FizzBuzz
 * 3の倍数で割り切れる場合はFizzを表示
 * 5の倍数で割り切れる場合はBuzzを表示
 * 3でも5でも割り切れる場合はFizzBuzzを表示
 */
def fizzBuzz: Unit = {
  (1 to 100).foreach{
    case x if(x % 15 == 0) => println("FizzBuzz")
    case x if(x % 3 == 0) => println("Fizz")
    case x if(x % 5 == 0) => println("Buzz")
    case x => println(x)
  }
}
Worksheet上で確認すると・・・
28


おお!なんと右側に即座に結果が出力されます!便利ですね!
ただ初期設定だと出力結果は35Lineしか表示されないようです。。。

実行途中からoutput exceeds cutoff limit.メッセージが出力されています。

これだと不便なので、設定値を変更しましょう。

IntelliJ > Preferences > Languages & Frameworks > Scala > Worksheetタブを選択

Output cutoff limit, lines を35になっているのでこの数値を引き上げましょう。
ここでは100に引き上げます。



基本の使い方はこんな感じです。

では次に別ファイル「Foo.scala」にオブジェクトを作成して
それをWorksheetから呼び出してみましょう。

package com.example

object Foo {
def say : Unit = {
println("Hello, world!")
Hello.say
}
}


つまらぬソースコードを書いてしまいました。

ではこやつを早速Worksheetから呼びだしてみましょう。

import com.example.Foo
Foo.say

おっと、エラー出てしまいました。

Error:(1, 10) object Hoge is not a member of package com.example
;import com.example.Hoge
        ^
追加したファイルを認識していないようです。
Classファイルが作成されていないことが原因のようなのでBuildしてClassファイルを作成してあげましょう。

Build > Rebuild Project

これで実行できます!
Hello, world
これで明日からあなたもストレスフリー。No Worksheet No Scala Lifeですね。