Scala再入門メモ:その1

挫折したままにしておくのはもったいない気がしてきたので。
超・基礎の基礎から再入門する。

資料: https://dwango.github.io/scala_text/

sbt consoleの起動

初回起動はとても時間がかかった。

$ sbt console
Getting org.scala-sbt sbt 0.13.9 ...
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.9/jars/sbt.jar ...
    [SUCCESSFUL ] org.scala-sbt#sbt;0.13.9!sbt.jar (3893ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/main/0.13.9/jars/main.jar ...
    [SUCCESSFUL ] org.scala-sbt#main;0.13.9!main.jar (8053ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-interface/0.13.9/jars/compiler-interface-bin.jar ...
    [SUCCESSFUL ] org.scala-sbt#compiler-interface;0.13.9!compiler-interface-bin.jar (4261ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-interface/0.13.9/jars/compiler-interface-src.jar ...
    [SUCCESSFUL ] org.scala-sbt#compiler-interface;0.13.9!compiler-interface-src.jar (4059ms)
・・・略・・・
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/cross/0.13.9/jars/cross.jar ...
    [SUCCESSFUL ] org.scala-sbt#cross;0.13.9!cross.jar (4000ms)
downloading https://jcenter.bintray.com/org/scala-sbt/ivy/ivy/2.3.0-sbt-c5d1b95fdcc1e1007740ffbecf4eb07abc51ec93/ivy-2.3.0-sbt-c5d1b95fdcc1e1007740ffbecf4eb07abc51ec93.jar ...
    [SUCCESSFUL ] org.scala-sbt.ivy#ivy;2.3.0-sbt-c5d1b95fdcc1e1007740ffbecf4eb07abc51ec93!ivy.jar (1982ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/cache/0.13.9/jars/cache.jar ...
    [SUCCESSFUL ] org.scala-sbt#cache;0.13.9!cache.jar (4282ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/test-agent/0.13.9/jars/test-agent.jar ...
    [SUCCESSFUL ] org.scala-sbt#test-agent;0.13.9!test-agent.jar (4725ms)
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/apply-macro/0.13.9/jars/apply-macro.jar ...
    [SUCCESSFUL ] org.scala-sbt#apply-macro;0.13.9!apply-macro.jar (4058ms)
:: retrieving :: org.scala-sbt#boot-app
    confs: [default]
    52 artifacts copied, 0 already retrieved (17785kB/527ms)
Getting Scala 2.10.5 (for sbt)...
downloading https://jcenter.bintray.com/org/scala-lang/jline/2.10.5/jline-2.10.5.jar ...
    [SUCCESSFUL ] org.scala-lang#jline;2.10.5!jline.jar (1155ms)
:: retrieving :: org.scala-sbt#boot-scala
    confs: [default]
    5 artifacts copied, 0 already retrieved (24493kB/211ms)
[info] Set current project to work (in build file:/Users/maetoo11/work/)
[info] Updating {file:/Users/maetoo11/work/}work...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

Visual Studio Codeのシンタックスハイライトプラグイン

Visual Studio CodeでScalaを書くなら、下記プラグインを入れるとよい。
Scala | Visual Studio Marketplace

フォールスルーとは?

Switchの「フォールスルー」って何?
JavaとかCではフォールスルーの動作があると記載されていた。

こういうやつのことらしい。

int value = 0;
switch (value) {
case 0:
case 10:
  // 処理1
  break;
default:
  // 処理2
}

参考:Java の switch 構文落とし穴 - Status Code 303 - See Other

「束縛される」とは?

var i = 0 というのは、"iという変数に0というIntのオブジェクトをbind(束縛)した" ということになる
scalaでは、なぜインクリメントやデクリメントができないのか? - scalaとか・・・ より

確かにインクリメント書いたらエラーになったな…。
「代入以外の方法で束縛できない」という部分で納得できた。

Listを引数でとるとき

下記のように書くと type List takes type parameters というエラーが出る。

def func(list: List) = {
  // 処理
}

型を指定しなさいということ。

def func(list: List[String]) = {
  // 処理
}