初心者向けScala勉強会 
第一回 2014/11/18 
! 
Shuya Tsukamoto 
1
勉強会概要 
• 目的 
人並みにScalaを使えるようになる 
• 期間 
2014/11/18 - 2015/3/31 
毎週火曜 
• 対象 
チームメンバー 
※既に存在する中級者向け(?)のScala勉強会へ 
合流できるようになりましょう
これから使う本 
• Guide to ScalaーScalaプログラミン 
グ入門 [Kindle版] 
• 安い(100円) 
• 薄い(139ページ)
基礎知識
Scalaって何? 
• プログラミング言語 
オブジェクト指向型+関数型 
• JVM(Java Virtual Machine)言語とも 
• Martin Odersky作 
• 少ないコードで多くのことができる!
Scalaって何? 
• プログラミング言語 
オブジェクト指向型+関数型 
• JVM(Java Virtual Machine)言語とも 
• Martin Odersky作 
• 少ないコードで多くのことができる!
オブジェクト指向+関数型 
• カプセル化や抽象化 
class, object, private, protected, trait(interface), 
extend, etc 
• 関数型 
val, first class function, 参照透過性・副作用無し, 
lambda 
• 全部分からなくてもOK 
半分分かればそれなりに書ける
Scalaって何? 
• プログラミング言語 
オブジェクト指向型+関数型 
• JVM(Java Virtual Machine)言語とも 
• Martin Odersky作 
• 少ないコードで多くのことができる!
実行 
scalac 
ScalaコードJVM中間コード 
JVM 
scala(java)
実行 
scalac 
ScalaコードJVM中間コード 
JVM 
scala(java) 
実務ではビルドツールsbtを利用するので 
コマンドは覚える必要なし
Scalaって何? 
• プログラミング言語 
オブジェクト指向型+関数型 
• JVM(Java Virtual Machine)言語とも 
• Martin Odersky作 
• 少ないコードで多くのことができる!
少ないコード 
// Person.java 
public class Person { 
private int id; 
private String name; 
! 
// getter 
// toString 
// equals 
// hashCode 
}
少ないコード 
// Person.java 
public class Person { 
private int id; 
private String name; 
! 
// getter 
// toString 
// equals 
// hashCode 
} 
// Person.scala 
case class Person( 
id: Int, 
name: String 
)
少ないコード 
// Main.java 
List<String> list = new ArrayList<>(); 
for (Person p : persons) { 
list.add(p.getName()); 
}
少ないコード 
// Main.java 
List<String> list = new ArrayList<>(); 
for (Person p : persons) { 
list.add(p.getName()); 
} 
// Main.scala 
val list = persons map (_.name)
Javaプログラマ(自分)の脳内 
// Main.java 
List<String> list = new ArrayList<>(); 
for (Person p : persons) { 
list.add(p.getName()); 
} 
自分「リストを作って、ループして、addしている」 
自分「name・・・ああ、nameのリストだ!」 
自分「これ、変換処理だ・・・!」
Scalaプログラマ(自分)の脳内 
// Main.scala 
val list = persons map (_.name) 
自分「map・・・これ、変換処理だ・・・!」
開発環境
開発環境構築 
• よくあるパターン 
• Intellij + Scala plugin + sbt plugin 
• Eclipse + Scala IDE plugin 
• Text editor + sbt
Intellijの場合 (おすすめ) 
• UltimateとCommunity 
• Communityの場合、Play framework pluginなど 
が使えない 
• 今回はCommunityで。
1. Intellij DL 
2. Intellij Install 
3. Preferences -> Plugins -> Browse 
Repositories 
4. Scala, SBT pluginをインストール 
5. 以上
Hello world!
コード 
// Main.scala 
object Main { 
def main(args: Array[String]) { 
println("Hello world!") 
} 
} 
# REPL (scalaコマンド) 
scala 
! 
scala> println("Hello world!") 
Hello world!
説明 
// Main.scala 
object Main { 
def main(args: Array[String]) { 
println("Hello world!") 
} 
} 
Javaと同じ 
重要:main(args: Array[String]) 
エントリポイント
説明 
# REPL (scalaコマンド) 
scala 
! 
scala> println("Hello world!") 
Hello world! 
対話型で実行したいとき用。インタプリタ
今週の課題 
1. scalac, scalaコマンドでHello worldを実行してみましょう 
2. REPLでHello worldを実行してみましょう 
3. IDEでHello worldを実行してみましょう 
4. scalacで作った中間コードをjavaコマンドで実行するとど 
うなるか確認しましょう 
5. scalacで作った中間コードをjavaコマンドで実行するには 
どうすれば良いか考えてみましょう
今週の課題 
6. Hello worldの例は以下のように書いても動きま 
す。理由を調べてみましょう。 
// Main.scala 
object Main extends App { 
println("Hello world!") 
}

Scala勉強会_2014_11_18