27
初心者向けScala勉強会 第一回 2014/11/18 Shuya Tsukamoto 1

Scala勉強会_2014_11_18

Embed Size (px)

Citation preview

Page 1: Scala勉強会_2014_11_18

初心者向けScala勉強会第一回 2014/11/18

!Shuya Tsukamoto

1

Page 2: Scala勉強会_2014_11_18

勉強会概要• 目的人並みにScalaを使えるようになる

• 期間2014/11/18 - 2015/3/31毎週火曜

• 対象チームメンバー※既に存在する中級者向け(?)のScala勉強会へ

合流できるようになりましょう

Page 3: Scala勉強会_2014_11_18

これから使う本• Guide to ScalaーScalaプログラミング入門 [Kindle版]

• 安い(100円)

• 薄い(139ページ)

Page 4: Scala勉強会_2014_11_18

基礎知識

Page 5: Scala勉強会_2014_11_18

Scalaって何?• プログラミング言語オブジェクト指向型+関数型

• JVM(Java Virtual Machine)言語とも

• Martin Odersky作

• 少ないコードで多くのことができる!

Page 6: Scala勉強会_2014_11_18

Scalaって何?• プログラミング言語オブジェクト指向型+関数型

• JVM(Java Virtual Machine)言語とも

• Martin Odersky作

• 少ないコードで多くのことができる!

Page 7: Scala勉強会_2014_11_18

オブジェクト指向+関数型• カプセル化や抽象化class, object, private, protected, trait(interface), extend, etc

• 関数型val, first class function, 参照透過性・副作用無し, lambda

• 全部分からなくてもOK半分分かればそれなりに書ける

Page 8: Scala勉強会_2014_11_18

Scalaって何?• プログラミング言語オブジェクト指向型+関数型

• JVM(Java Virtual Machine)言語とも

• Martin Odersky作

• 少ないコードで多くのことができる!

Page 9: Scala勉強会_2014_11_18

実行

Scalaコード JVM中間コード

scalac

JVM

scala(java)

Page 10: Scala勉強会_2014_11_18

実行

Scalaコード JVM中間コード

scalac

JVM

scala(java)

実務ではビルドツールsbtを利用するので コマンドは覚える必要なし

Page 11: Scala勉強会_2014_11_18

Scalaって何?• プログラミング言語オブジェクト指向型+関数型

• JVM(Java Virtual Machine)言語とも

• Martin Odersky作

• 少ないコードで多くのことができる!

Page 12: Scala勉強会_2014_11_18

少ないコード// Person.java public class Person { private int id; private String name; ! // getter // toString // equals // hashCode }

Page 13: Scala勉強会_2014_11_18

少ないコード// Person.java public class Person { private int id; private String name; ! // getter // toString // equals // hashCode }

// Person.scala case class Person( id: Int, name: String )

Page 14: Scala勉強会_2014_11_18

少ないコード// Main.java List<String> list = new ArrayList<>(); for (Person p : persons) { list.add(p.getName()); }

Page 15: Scala勉強会_2014_11_18

少ないコード// Main.java List<String> list = new ArrayList<>(); for (Person p : persons) { list.add(p.getName()); }

// Main.scala val list = persons map (_.name)

Page 16: Scala勉強会_2014_11_18

Javaプログラマ(自分)の脳内// Main.java List<String> list = new ArrayList<>(); for (Person p : persons) { list.add(p.getName()); }

自分「リストを作って、ループして、addしている」 自分「name・・・ああ、nameのリストだ!」 自分「これ、変換処理だ・・・!」

Page 17: Scala勉強会_2014_11_18

Scalaプログラマ(自分)の脳内

自分「map・・・これ、変換処理だ・・・!」

// Main.scala val list = persons map (_.name)

Page 18: Scala勉強会_2014_11_18

開発環境

Page 19: Scala勉強会_2014_11_18

開発環境構築• よくあるパターン

• Intellij + Scala plugin + sbt plugin

• Eclipse + Scala IDE plugin

• Text editor + sbt

Page 20: Scala勉強会_2014_11_18

Intellijの場合 (おすすめ)• UltimateとCommunity

• Communityの場合、Play framework pluginなどが使えない

• 今回はCommunityで。

Page 21: Scala勉強会_2014_11_18

1. Intellij DL 2. Intellij Install 3. Preferences -> Plugins -> Browse

Repositories 4. Scala, SBT pluginをインストール 5. 以上

Page 22: Scala勉強会_2014_11_18

Hello world!

Page 23: Scala勉強会_2014_11_18

コード// Main.scala object Main { def main(args: Array[String]) { println("Hello world!") } }

# REPL (scalaコマンド) scala !scala> println("Hello world!") Hello world!

Page 24: Scala勉強会_2014_11_18

説明// Main.scala object Main { def main(args: Array[String]) { println("Hello world!") } }

Javaと同じ 重要:main(args: Array[String]) エントリポイント

Page 25: Scala勉強会_2014_11_18

説明

対話型で実行したいとき用。インタプリタ

# REPL (scalaコマンド) scala !scala> println("Hello world!") Hello world!

Page 26: Scala勉強会_2014_11_18

今週の課題1. scalac, scalaコマンドでHello worldを実行してみましょう

2. REPLでHello worldを実行してみましょう

3. IDEでHello worldを実行してみましょう

4. scalacで作った中間コードをjavaコマンドで実行するとどうなるか確認しましょう

5. scalacで作った中間コードをjavaコマンドで実行するにはどうすれば良いか考えてみましょう

Page 27: Scala勉強会_2014_11_18

今週の課題6. Hello worldの例は以下のように書いても動きま

す。理由を調べてみましょう。// Main.scala object Main extends App { println("Hello world!") }