Scala会議倉敷サテライト Scalaで萌える関数型プログラミング    [1.1.RC1]                 1/53
前回までのあらすじ●   7/9(土)のOITECでScalaについてのLTを    やったのであった!●   更に7/17(日)オープンラボ備後で完全版の    セッションをやった!●   今回はその再放送版です    (若干新しい情報を盛り...
今から話す人の           ざっくりとした説明●   角田裕樹(すみだゆうき)●   Hatena / id:razon●   Twitter / @razon●   ×ラゾン ○レゾン ◎しゾン●   天領倉敷Scalaの言いだしっぺ...
これからお話しすること●   Scalaってなんぞ●   関数型プログラミングってなんぞ●   天領倉敷Scalaって何?●   Scala勉強するのにどうすればいいのさ●   開発環境とかどんなのがあるのん?●   時間が余ったらライブコーデ...
Scalaってなんぞ?              5/53
Scalaってなんぞ?●   スイス連邦工科大学(EPFL)のMartin Odersky    が設計したプログラム言語●   JVM上で動作する    (コンパイルするとJavaのバイトコードになる)    ※.NET向け実装をMS支援のも...
Scalaってなんぞ?●   JVM上で動くと何が嬉しいのん?    →Javaとの相互利用が可能     →Javaの資源(ライブラリ・FW・ミドル)      がそのまま利用可能      ・JDBCドライバ     ・Servlet/Ja...
Scalaってなんぞ?●   ちゃんとした所で使われてんの?    →使われてます!                      8/53
Scalaってなんぞ?●   ちゃんとした所で使われてんの?    →使われてます!                      9/53
関数型プログラミング  ってなんぞ?             10/53
関数型プログラミングってなんぞ?●   元々はラムダ計算の概念をプログラミング言    語として体現したもの    →理論計算機科学や数理論理学における、     関数の定義と実行を抽象化した計算体系●   ご先祖様はLISP●   関数がファ...
関数型プログラミングってなんぞ?●   元々はラムダ計算の概念をプログラミング言    語として体現したもの    →理論計算機科学や数理論理学における、     関数の定義と実行を抽象化した計算体系●   ご先祖様はLISP●   関数がファ...
関数型プログラミングってなんぞ?●   で、何がうれしいのん?●   関数型言語といえば、コレクションの操作!scala> val list = 1 :: 5 :: 2 :: 3 :: 4 :: Nillist: List[Int] = Lis...
関数型プログラミングってなんぞ?●   入力に対し、関数をチェーンすることで    出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int ...
関数型プログラミングってなんぞ?●   入力に対し、関数をチェーンすることで    出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int ...
関数型プログラミングってなんぞ?●   入力に対し、関数をチェーンすることで    出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int ...
関数型プログラミングってなんぞ?●   イミュータブル!    →作成後にその状態を変えることができない                           17/53
関数型プログラミングってなんぞ?●   イミュータブル!    →作成後にその状態を変えることができない●   えっそれ不便じゃね…?    →覚えがありませんか?    →どこかのタイミングでここの変数の値が     おかしくなってエラーが出...
関数型プログラミングってなんぞ?●   イミュータブル!    →作成後にその状態を変えることができない●   えっそれ不便じゃね…?    →覚えがありませんか?    →どこかのタイミングでここの変数の値が     おかしくなってエラーが出...
関数型プログラミングってなんぞ?●   イミュータブルの副次的な恩恵●   テストがらくちんになる    (状態を考慮したテストをする必要が     なくなる)                        20/53
関数型プログラミングってなんぞ?●   イミュータブルの副次的な恩恵●   テストがらくちんになる    (状態を考慮したテストをする必要が     なくなる)●   並列処理がらくちんになる    状態を持たなければ、スレッドの同期や    ...
関数型プログラミングってなんぞ?●   カリー化と部分適用●   カリー化!scala> def add(x: Int, y: Int) = x + yadd: (x: Int, y: Int)Int↓scala> def add(x: Int...
関数型プログラミングってなんぞ?●   カリー化と部分適用●   カリー化!scala> def add(x: Int, y: Int) = x + yadd: (x: Int, y: Int)Int↓scala> def add(x: Int...
関数型プログラミングってなんぞ?●   部分適用した関数を使ってみるscala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala...
関数型プログラミングってなんぞ?●   部分適用した関数を使ってみるscala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala...
関数型プログラミングってなんぞ?●   遅延評価●   lazy valscala> val v = {println("Hello val !"); 0}Hello val !v: Int = 0scala> lazy val lVal = ...
関数型プログラミングってなんぞ?●   遅延評価●   名前渡し引数scala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala...
関数型プログラミングってなんぞ?●   遅延評価●   Streamによる無限リストscala> def makeInc(from: Int): Stream[Int] =     |   Stream.cons(from, makeInc(f...
関数型プログラミングってなんぞ?●   パターンマッチ!●   型別に振り分けてみるscala> def judgeType(in: Any) = in match {     |   case _: String => "String!"  ...
関数型プログラミングってなんぞ?●   パターンマッチ!●   定番のFizzBuzzscala> def fizzbuzz(n:   Int) = n match {     |   case n if n %   15 == 0 => "f...
関数型プログラミングってなんぞ?●   パターンマッチ!●   CaseClassと組み合わせてscala> case class Person(name: String, sex: String, age: Int)defined class...
天領倉敷Scala って何?            32/53
天領倉敷Scalaって何?●   岡山県倉敷市周辺でScalaの勉強会を行う    コミュニティ●   「天領」…江戸時代における幕府の直轄領    倉敷市民がことあるごとに持ち上げる単語    →正直ウンザリする    →皮肉を込めた(天領倉...
Scala勉強するのにどうしたらいいのさ              34/53
Scala勉強するのに         どうしたらいいのさ    書籍●   Scalaスケーラブルプログラミング    [コンセプト&コーディング]●   通称コップ本●   聖典(Oderskyの著書)●   キッチリ書いてある分難しい● ...
Scala勉強するのに           どうしたらいいのさ    書籍●    Scalaプログラミング入門●   Lift Frameworkの中の人    David Pollakの著書●   天領倉敷Scalaではこの本を    ベー...
Scala勉強するのに          どうしたらいいのさ    書籍●   プログラミングScala●   通称バク本●   Twitter APIのリードプログラマーが    書いてる●   二冊目の本としてオススメの声多し       ...
Scala勉強するのに         どうしたらいいのさ    書籍●    Scala実践プログラミング●   日本のScala界の巨匠が結集して    書かれた本●   新しい(先月出ました)●   和書なので読みやすい●   初心者向け...
Scala勉強するのに         どうしたらいいのさ    フォローするべきScalaスーパーエンジニア●   @kmizu    Scalaエバンジェリストといえばこの人    ScalaDaysという世界のScala祭りで発表されてま...
Scala勉強するのに         どうしたらいいのさ    フォローするべきScalaスーパーエンジニア●   @xuwei_k    Scalaについてのエントリをブログで精力的に書いてる人    (OITEC版の資料でツッコミ頂きまし...
Scala勉強するのに             どうしたらいいのさ    フォローするべきScalaスーパーエンジニア●   その他思いつく限りでのScalaに触れてる方々    (多分取りこぼしがいっぱいありますサーセン)    @a_his...
Scala勉強するのに              どうしたらいいのさ    参考にしたいサイトとか●   本家    http://www.scala-lang.org/●   プログラミング言語Scala 日本語情報サイト    https:...
開発環境とかどんなのがあるのん?             43/53
開発環境とか       どんなのがあるのん?    エディタ編●    実はデフォルトで色んなエディタ/IDE用の拡張がついてる    geditとかtextmateとかxcodeとか…                            ...
開発環境とか            どんなのがあるのん?    エディタ編●    実はデフォルトで色んなエディタ/IDE用の拡張がついてる    geditとかtextmateとかxcodeとか…●   とはいえ、vim or emacs で...
開発環境とか           どんなのがあるのん?    IDE編●   以前はIDEサポートが実に残念であった…●   今では割と大丈夫なクオリティになったとか●   IntelliJ IDEA    昔はこれくらいしかまともに使えるID...
開発環境とか           どんなのがあるのん?    IDE編●   Eclipse●   NetBeans    Java開発に於いては定番ですね    特にEclipseは昔はひっじょーーーーーに残念なクオリティ    をしていまし...
開発環境とか           どんなのがあるのん?    IDE編●   Eclipse●   NetBeans    Java開発に於いては定番ですね    特にEclipseは昔はひっじょーーーーーに残念なクオリティ    をしていまし...
開発環境とか          どんなのがあるのん?    ビルドツール編●   sbt(simple-build-tool)●   Scalaのビルドツールはこれが鉄板●   一部では「酢豚」とか「サバト」の愛称で親しまれる●   maven...
デモる?(時間の許す限り)            50/53
あと最後に●   魔法少女Scalaちゃん(@scalachan)を    今すぐフォロー!                                51/53
あと最後に 一緒にF#やろうぜ!         52/53
あと最後に●   間違えた     一緒にScala     やろうぜ!                   53/53
Upcoming SlideShare
Loading in …5
×

Scalaで萌える関数型プログラミング[1.1.RC1]

2,313 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,313
On SlideShare
0
From Embeds
0
Number of Embeds
46
Actions
Shares
0
Downloads
14
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Scalaで萌える関数型プログラミング[1.1.RC1]

  1. 1. Scala会議倉敷サテライト Scalaで萌える関数型プログラミング [1.1.RC1] 1/53
  2. 2. 前回までのあらすじ● 7/9(土)のOITECでScalaについてのLTを やったのであった!● 更に7/17(日)オープンラボ備後で完全版の セッションをやった!● 今回はその再放送版です (若干新しい情報を盛り込んだりしてます)● OITECで実践F#をもらったのでちょっと なびいたのはここだけの秘密だ! 2/53
  3. 3. 今から話す人の ざっくりとした説明● 角田裕樹(すみだゆうき)● Hatena / id:razon● Twitter / @razon● ×ラゾン ○レゾン ◎しゾン● 天領倉敷Scalaの言いだしっぺ● 本業はJavaプログラマ その時々で他のことも結構やってるけど… 3/53
  4. 4. これからお話しすること● Scalaってなんぞ● 関数型プログラミングってなんぞ● 天領倉敷Scalaって何?● Scala勉強するのにどうすればいいのさ● 開発環境とかどんなのがあるのん?● 時間が余ったらライブコーディングとか? 4/53
  5. 5. Scalaってなんぞ? 5/53
  6. 6. Scalaってなんぞ?● スイス連邦工科大学(EPFL)のMartin Odersky が設計したプログラム言語● JVM上で動作する (コンパイルするとJavaのバイトコードになる) ※.NET向け実装をMS支援のもと絶賛開発中 →VisualStudioで開発できるとか(な、なんd(ry →IKVMベース(.Net上で動くJava実装)● オブジェクト指向と関数型のハイブリッド 6/53
  7. 7. Scalaってなんぞ?● JVM上で動くと何が嬉しいのん? →Javaとの相互利用が可能 →Javaの資源(ライブラリ・FW・ミドル) がそのまま利用可能 ・JDBCドライバ ・Servlet/JavaEEコンテナ ・などなど… 7/53
  8. 8. Scalaってなんぞ?● ちゃんとした所で使われてんの? →使われてます! 8/53
  9. 9. Scalaってなんぞ?● ちゃんとした所で使われてんの? →使われてます! 9/53
  10. 10. 関数型プログラミング ってなんぞ? 10/53
  11. 11. 関数型プログラミングってなんぞ?● 元々はラムダ計算の概念をプログラミング言 語として体現したもの →理論計算機科学や数理論理学における、 関数の定義と実行を抽象化した計算体系● ご先祖様はLISP● 関数がファーストオブジェクト →関数を変数に格納できる →関数を引数の値として指定できる →関数を戻り値として指定できる 11/53
  12. 12. 関数型プログラミングってなんぞ?● 元々はラムダ計算の概念をプログラミング言 語として体現したもの →理論計算機科学や数理論理学における、 関数の定義と実行を抽象化した計算体系● ご先祖様はLISP● 関数がファーストオブジェクト →関数を変数に格納できる →関数を引数の値として指定できる →関数を戻り値として指定できる● =高階関数! 12/53
  13. 13. 関数型プログラミングってなんぞ?● で、何がうれしいのん?● 関数型言語といえば、コレクションの操作!scala> val list = 1 :: 5 :: 2 :: 3 :: 4 :: Nillist: List[Int] = List(1, 5, 2, 3, 4)scala> list.filter(_ % 2 == 0)res0: List[Int] = List(2, 4)scala> list.sortWith(_ < _)res1: List[Int] = List(1, 2, 3, 4, 5)scala> list.map(_ * 2)res2: List[Int] = List(2, 10, 4, 6, 8)scala> list.reduceLeft(_ + _)res3: Int = 15 13/53
  14. 14. 関数型プログラミングってなんぞ?● 入力に対し、関数をチェーンすることで 出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int = 12 14/53
  15. 15. 関数型プログラミングってなんぞ?● 入力に対し、関数をチェーンすることで 出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int = 12● 手続き型っぽい処理と比べると…var sum = 0for (i <- list) { if (i % 2 == 0) { sum += i * 2 }} 15/53
  16. 16. 関数型プログラミングってなんぞ?● 入力に対し、関数をチェーンすることで 出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int = 12 抽出 変換 集計● 手続き型っぽい処理と比べると…var sum = 0for (i <- list) { if (i % 2 == 0) { sum += i * 2 }} 抽出 集計 変換 16/53
  17. 17. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない 17/53
  18. 18. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない● えっそれ不便じゃね…? →覚えがありませんか? →どこかのタイミングでここの変数の値が おかしくなってエラーが出る →その変数(状態)が変わる(ことができる)のが原因 18/53
  19. 19. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない● えっそれ不便じゃね…? →覚えがありませんか? →どこかのタイミングでここの変数の値が おかしくなってエラーが出る →その変数(状態)が変わる(ことができる)のが原因● 関数型らしいコードを書くことで、 変化する状態を最小限にすることができる (純粋関数型言語のHaskellなどは変数に再代入不可) 19/53
  20. 20. 関数型プログラミングってなんぞ?● イミュータブルの副次的な恩恵● テストがらくちんになる (状態を考慮したテストをする必要が なくなる) 20/53
  21. 21. 関数型プログラミングってなんぞ?● イミュータブルの副次的な恩恵● テストがらくちんになる (状態を考慮したテストをする必要が なくなる)● 並列処理がらくちんになる 状態を持たなければ、スレッドの同期や ロックなどを考慮する必要がなくなる →Scalaでは状態を持つ場合でも比較的簡単に並列処理を 行うためのActorライブラリというものもあります 21/53
  22. 22. 関数型プログラミングってなんぞ?● カリー化と部分適用● カリー化!scala> def add(x: Int, y: Int) = x + yadd: (x: Int, y: Int)Int↓scala> def add(x: Int)(y: Int) = x + yadd: (x: Int)(y: Int)Int 22/53
  23. 23. 関数型プログラミングってなんぞ?● カリー化と部分適用● カリー化!scala> def add(x: Int, y: Int) = x + yadd: (x: Int, y: Int)Int↓scala> def add(x: Int)(y: Int) = x + yadd: (x: Int)(y: Int)Int● 部分適用!scala> def inc = add(1)_inc: (Int) => Int● その名のとおり、関数の引数の一部を適用 した新たな関数を作ることができる 23/53
  24. 24. 関数型プログラミングってなんぞ?● 部分適用した関数を使ってみるscala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala> list.map(inc)res1: List[Int] = List(2, 3, 4, 5, 6) 24/53
  25. 25. 関数型プログラミングってなんぞ?● 部分適用した関数を使ってみるscala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala> list.map(inc)res1: List[Int] = List(2, 3, 4, 5, 6)● カリー化しなくても、プレースホルダー構文 で!scala> def add(x: Int, y: Int) = x + yadd: (x: Int, y: Int)Intscala> list.map(add(1, _))res2: List[Int] = List(2, 3, 4, 5, 6) 25/53
  26. 26. 関数型プログラミングってなんぞ?● 遅延評価● lazy valscala> val v = {println("Hello val !"); 0}Hello val !v: Int = 0scala> lazy val lVal = {println("Hello lazy val !"); 0}lVal: Int = <lazy>scala> println(lVal)Hello lazy val !0scala> println(lVal)0 26/53
  27. 27. 関数型プログラミングってなんぞ?● 遅延評価● 名前渡し引数scala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nillist: List[Int] = List(1, 2, 3, 4, 5)scala> val itr = list.iteratoritr: Iterator[Int] = non-empty iteratorscala> def hello(i: => Int) = { | println("Excel方眼紙爆発しろ " + i) | println("Excel方眼紙爆発しろ " + i)}hello: (i: => Int)Unitscala> hello(itr.next)Excel方眼紙爆発しろ 1Excel方眼紙爆発しろ 2 27/53
  28. 28. 関数型プログラミングってなんぞ?● 遅延評価● Streamによる無限リストscala> def makeInc(from: Int): Stream[Int] = | Stream.cons(from, makeInc(from + 1))makeInc: (from: Int)Stream[Int]scala> val inc = makeInc(10)inc: Stream[Int] = Stream(10, ?)scala> inc take 5 toListres11: List[Int] = List(10, 11, 12, 13, 14) 28/53
  29. 29. 関数型プログラミングってなんぞ?● パターンマッチ!● 型別に振り分けてみるscala> def judgeType(in: Any) = in match { | case _: String => "String!" | case _: Int => "Int!" | case _ => "Other!" | }judgeType: (in: Any)java.lang.Stringscala> judgeType("1")res1: java.lang.String = String!scala> judgeType(1)res2: java.lang.String = Int!scala> judgeType(1 :: Nil)res3: java.lang.String = Other! 29/53
  30. 30. 関数型プログラミングってなんぞ?● パターンマッチ!● 定番のFizzBuzzscala> def fizzbuzz(n: Int) = n match { | case n if n % 15 == 0 => "fizzbuzz" | case n if n % 3 == 0 => "fizz" | case n if n % 5 == 0 => "buzz" | case _ => n | }fizzbuzz: (n: Int)Anyscala> 1 to 20 map fizzbuzzres1: scala.collection.immutable.IndexedSeq[Any] = Vector(1,2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14,fizzbuzz, 16, 17, fizz, 19, buzz) 30/53
  31. 31. 関数型プログラミングってなんぞ?● パターンマッチ!● CaseClassと組み合わせてscala> case class Person(name: String, sex: String, age: Int)defined class Personscala> def judgePerson(p: Person) = p match { | case Person(n, s, a) if s == "female" && a < 10 => n + ":幼女" | case Person(n, s, a) if s == "female" => n + ":ババァ" | case _ => "後はどうでもいい" | }judgePerson: (p: Person)java.lang.Stringscala> judgePerson(Person("razonの娘", "female", 2))res1: java.lang.String = razonの娘:幼女 31/53
  32. 32. 天領倉敷Scala って何? 32/53
  33. 33. 天領倉敷Scalaって何?● 岡山県倉敷市周辺でScalaの勉強会を行う コミュニティ● 「天領」…江戸時代における幕府の直轄領 倉敷市民がことあるごとに持ち上げる単語 →正直ウンザリする →皮肉を込めた(天領倉敷(笑))● ハッシュタグは「#tkscala」 岡山県内の勉強会コミュニティでも異彩を放つTL として一部で悪名高い● 次回は8/20(土)でーす 33/53
  34. 34. Scala勉強するのにどうしたらいいのさ 34/53
  35. 35. Scala勉強するのに どうしたらいいのさ 書籍● Scalaスケーラブルプログラミング [コンセプト&コーディング]● 通称コップ本● 聖典(Oderskyの著書)● キッチリ書いてある分難しい● あと高い(5k近くする)● が、買う価値はあり● 9/27に第2版が発売(予定)なので、そちらをどうぞ 35/53
  36. 36. Scala勉強するのに どうしたらいいのさ 書籍● Scalaプログラミング入門● Lift Frameworkの中の人 David Pollakの著書● 天領倉敷Scalaではこの本を ベースに学習しています● コップ本よりは読みやすい 36/53
  37. 37. Scala勉強するのに どうしたらいいのさ 書籍● プログラミングScala● 通称バク本● Twitter APIのリードプログラマーが 書いてる● 二冊目の本としてオススメの声多し 37/53
  38. 38. Scala勉強するのに どうしたらいいのさ 書籍● Scala実践プログラミング● 日本のScala界の巨匠が結集して 書かれた本● 新しい(先月出ました)● 和書なので読みやすい● 初心者向けはコレが鉄板かと● 上級者からは「物足りない」の声あり● ただし、他の本で触れられていない部分 についての解説あり (デザパタ・限定継続など…) 38/53
  39. 39. Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア● @kmizu Scalaエバンジェリストといえばこの人 ScalaDaysという世界のScala祭りで発表されてます! Scalaとか静的型付け vs 動的型付けなどの議論をMatzと繰 り広げる猛者● @yuroyoro 日本Scala界のスーパースター 最近ではほむほむ言語の中の人として脚光を浴びる 新作言語ウキャスがマジ宇宙語 39/53
  40. 40. Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア● @xuwei_k Scalaについてのエントリをブログで精力的に書いてる人 (OITEC版の資料でツッコミ頂きましたthx!) RubyKaigiでMatzに「Scalaの人ですね」的なことを言われ たとか● @keisuke_n 日本のScala祭り「Scala座」第一回主催 WebFlavorというScalaフレームワークの作者でもある 大都会岡山クラスタ 天領倉敷Scalaにも何度か来ていただきました 40/53
  41. 41. Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア● その他思いつく限りでのScalaに触れてる方々 (多分取りこぼしがいっぱいありますサーセン) @a_hisame, @asami224, @bleis, @cooldaemon, @cpp_akira, @halcat0x15a, @hito_asa, @itoasuka, @j5ik2o, @kaigaiengineer, @katzchang, @keigoi, @maeda_, @maiha, @mumoshu, @mzp, @NetPenguin, @nosen, @nouvellelune, @osiire, @papamitra, @PG_kura, @pomu0325, @rf0444, @RKTM, @ryugate, @ScalaTohoku, @shomah4a, @syuta, @takedasoft, @terurou, @tototoshi, @yasushia, @ymnk, @yoshihiro503 41/53
  42. 42. Scala勉強するのに どうしたらいいのさ 参考にしたいサイトとか● 本家 http://www.scala-lang.org/● プログラミング言語Scala 日本語情報サイト https://sites.google.com/site/scalajp/● Scala開眼 http://www.h7.dion.ne.jp/~samwyn/Scala/scalaindex.htm● Scala勉強会@東北 https://sites.google.com/site/scalatohoku/ 42/53
  43. 43. 開発環境とかどんなのがあるのん? 43/53
  44. 44. 開発環境とか どんなのがあるのん? エディタ編● 実はデフォルトで色んなエディタ/IDE用の拡張がついてる geditとかtextmateとかxcodeとか… 44/53
  45. 45. 開発環境とか どんなのがあるのん? エディタ編● 実はデフォルトで色んなエディタ/IDE用の拡張がついてる geditとかtextmateとかxcodeとか…● とはいえ、vim or emacs ですよね! →エディタ宗教戦争だー!● vim codefellowとかneocmplecacheで補完が効いたりするらし いですよ(emacs派なのでわかりませんサーセン←)● emacs ENSIMEというのがありますよ奥さん 補完とかリファクタリングとか効いて結構強力 45/53
  46. 46. 開発環境とか どんなのがあるのん? IDE編● 以前はIDEサポートが実に残念であった…● 今では割と大丈夫なクオリティになったとか● IntelliJ IDEA 昔はこれくらいしかまともに使えるIDEがなかった →結果、今でも使ってる人が多い(気がする) sbt(後述)consoleがあるのもステキ 但し、無料版はAPサーバとの統合が無いので注意 46/53
  47. 47. 開発環境とか どんなのがあるのん? IDE編● Eclipse● NetBeans Java開発に於いては定番ですね 特にEclipseは昔はひっじょーーーーーに残念なクオリティ をしていましたが、今では結構大丈夫みたいです! (最近はちょろっとしか触ってないから良くわry) 47/53
  48. 48. 開発環境とか どんなのがあるのん? IDE編● Eclipse● NetBeans Java開発に於いては定番ですね 特にEclipseは昔はひっじょーーーーーに残念なクオリティ をしていましたが、今では結構大丈夫みたいです! (最近はちょろっとしか触ってないから良くわry)● という訳で、趣味で(というか、自分の手に 馴染むモノを)選んでいいかも? 48/53
  49. 49. 開発環境とか どんなのがあるのん? ビルドツール編● sbt(simple-build-tool)● Scalaのビルドツールはこれが鉄板● 一部では「酢豚」とか「サバト」の愛称で親しまれる● mavenのpom.xmlをScalaで書く感じだと言ったら 乱暴だろうか… (sbtのディレクトリ構成はmaven準拠で、連携可能)● Javaもビルドできる● ファイルの更新を検出して自動的にコンパイルしたり テストコード走らせたりとか 49/53
  50. 50. デモる?(時間の許す限り) 50/53
  51. 51. あと最後に● 魔法少女Scalaちゃん(@scalachan)を 今すぐフォロー! 51/53
  52. 52. あと最後に 一緒にF#やろうぜ! 52/53
  53. 53. あと最後に● 間違えた 一緒にScala やろうぜ! 53/53

×