Scala勉強会_2014_11_18

Preview:

Citation preview

初心者向け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作

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

実行

Scalaコード JVM中間コード

scalac

JVM

scala(java)

実行

Scalaコード JVM中間コード

scalac

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プログラマ(自分)の脳内

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

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

開発環境

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

• 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!") }