Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
闇JVMKaigi Scalaで萌える関数型プログラミング   [完全版]              1/52
前回までのあらすじ●   7/9(土)のOITECでScalaについてのLTを    やったのであった!●   時間全然足りなかったしちゃんとしたことが    伝えきれなかった!    (SlideShareにあげたら何人かにRTされた。   ...
今から話す人の           ざっくりとした説明●   角田裕樹(すみだゆうき)●   Hatena / id:razon●   Twitter / @razon●   ×ラゾン ○レゾン ◎しゾン●   天領倉敷Scalaの言いだしっぺ...
これからお話しすること●   Scalaってなんぞ●   関数型プログラミングってなんぞ●   天領倉敷Scalaって何?●   Scala勉強するのにどうすればいいのさ●   開発環境とかどんなのがあるのん?●   時間が余ったらライブコーデ...
Scalaってなんぞ?              5/52
Scalaってなんぞ?●   スイス連邦工科大学(EPFL)のMartin Odersky    が設計したプログラム言語●   JVM上で動作する    (コンパイルするとJavaのバイトコードになる)    ※更新は止まっているが.NET向...
Scalaってなんぞ?●   JVM上で動くと何が嬉しいのん?    →Javaとの相互利用が可能     →Javaの資源(ライブラリ・FW・ミドル)      がそのまま利用可能      ・JDBCドライバ     ・Servlet/Ja...
Scalaってなんぞ?●   ちゃんとした所で使われてんの?    →使われてます!                      8/52
Scalaってなんぞ?●   ちゃんとした所で使われてんの?    →使われてます!                      9/52
関数型プログラミング  ってなんぞ?             10/52
関数型プログラミングってなんぞ?●   元々はラムダ計算の概念をプログラミング言    語として体現したもの    →理論計算機科学や数理論理学における、     関数の定義と実行を抽象化した計算体系●   ご先祖様は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/52
関数型プログラミングってなんぞ?●   イミュータブル!    →作成後にその状態を変えることができない●   えっそれ不便じゃね…?    →覚えがありませんか?    →どこかのタイミングでここの変数の値が     おかしくなってエラーが出...
関数型プログラミングってなんぞ?●   イミュータブル!    →作成後にその状態を変えることができない●   えっそれ不便じゃね…?    →覚えがありませんか?    →どこかのタイミングでここの変数の値が     おかしくなってエラーが出...
関数型プログラミングってなんぞ?●   イミュータブルの副次的な恩恵●   テストがらくちんになる    (状態を考慮したテストをする必要が     なくなる)                        20/52
関数型プログラミングってなんぞ?●   イミュータブルの副次的な恩恵●   テストがらくちんになる    (状態を考慮したテストをする必要が     なくなる)●   並列処理がらくちんになる    状態を持たなければ、スレッドの同期や    ...
関数型プログラミングってなんぞ?●   カリー化と部分適用●   カリー化!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/52
天領倉敷Scalaって何?●   岡山県倉敷市周辺でScalaの勉強会を行う    コミュニティ●   「天領」…江戸時代における幕府の直轄領    倉敷市民がことあるごとに持ち上げる単語    →正直ウンザリする    →皮肉を込めた(天領倉...
Scala勉強するのにどうしたらいいのさ              34/52
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...
開発環境とかどんなのがあるのん?             42/52
開発環境とか       どんなのがあるのん?    エディタ編●    実はデフォルトで色んなエディタ/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...
デモる?(時間の許す限り)            49/52
あと最後に●   魔法少女Scalaちゃん(@scalachan)を    今すぐフォロー!                                50/52
あと最後に 一緒にF#やろうぜ!         51/52
あと最後に●   間違えた     一緒にScala     やろうぜ!                   52/52
Upcoming SlideShare
Loading in …5
×

Scalaで萌える関数型プログラミング[完全版]

13,127 views

Published on

Published in: Technology
  • Be the first to comment

Scalaで萌える関数型プログラミング[完全版]

  1. 1. 闇JVMKaigi Scalaで萌える関数型プログラミング [完全版] 1/52
  2. 2. 前回までのあらすじ● 7/9(土)のOITECでScalaについてのLTを やったのであった!● 時間全然足りなかったしちゃんとしたことが 伝えきれなかった! (SlideShareにあげたら何人かにRTされた。 くだらん内容でサーセン● 今回は時間に余裕があるのでもう少し 掘り下げてお話をしようと思ったのである!● OITECで実践F#をもらったのでちょっと なびいたのはここだけの秘密だ! 2/52
  3. 3. 今から話す人の ざっくりとした説明● 角田裕樹(すみだゆうき)● Hatena / id:razon● Twitter / @razon● ×ラゾン ○レゾン ◎しゾン● 天領倉敷Scalaの言いだしっぺ● 本業はJavaプログラマ その時々で他のことも結構やってるけど… 3/52
  4. 4. これからお話しすること● Scalaってなんぞ● 関数型プログラミングってなんぞ● 天領倉敷Scalaって何?● Scala勉強するのにどうすればいいのさ● 開発環境とかどんなのがあるのん?● 時間が余ったらライブコーディングとか? 4/52
  5. 5. Scalaってなんぞ? 5/52
  6. 6. Scalaってなんぞ?● スイス連邦工科大学(EPFL)のMartin Odersky が設計したプログラム言語● JVM上で動作する (コンパイルするとJavaのバイトコードになる) ※更新は止まっているが.NET向け実装 (scala-msil)もあり →何か開発進めるためにMSがお金を落としている という怪情報がTwitter上に流れてた…● オブジェクト指向と関数型のハイブリッド 6/52
  7. 7. Scalaってなんぞ?● JVM上で動くと何が嬉しいのん? →Javaとの相互利用が可能 →Javaの資源(ライブラリ・FW・ミドル) がそのまま利用可能 ・JDBCドライバ ・Servlet/JavaEEコンテナ ・などなど… 7/52
  8. 8. Scalaってなんぞ?● ちゃんとした所で使われてんの? →使われてます! 8/52
  9. 9. Scalaってなんぞ?● ちゃんとした所で使われてんの? →使われてます! 9/52
  10. 10. 関数型プログラミング ってなんぞ? 10/52
  11. 11. 関数型プログラミングってなんぞ?● 元々はラムダ計算の概念をプログラミング言 語として体現したもの →理論計算機科学や数理論理学における、 関数の定義と実行を抽象化した計算体系● ご先祖様はLISP● 関数がファーストオブジェクト →関数を変数に格納できる →関数を引数の値として指定できる →関数を戻り値として指定できる 11/52
  12. 12. 関数型プログラミングってなんぞ?● 元々はラムダ計算の概念をプログラミング言 語として体現したもの →理論計算機科学や数理論理学における、 関数の定義と実行を抽象化した計算体系● ご先祖様はLISP● 関数がファーストオブジェクト →関数を変数に格納できる →関数を引数の値として指定できる →関数を戻り値として指定できる● =高階関数! 12/52
  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/52
  14. 14. 関数型プログラミングってなんぞ?● 入力に対し、関数をチェーンすることで 出力形式に変換していくscala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)res4: Int = 12 14/52
  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/52
  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/52
  17. 17. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない 17/52
  18. 18. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない● えっそれ不便じゃね…? →覚えがありませんか? →どこかのタイミングでここの変数の値が おかしくなってエラーが出る →その変数(状態)が変わる(ことができる)のが原因 18/52
  19. 19. 関数型プログラミングってなんぞ?● イミュータブル! →作成後にその状態を変えることができない● えっそれ不便じゃね…? →覚えがありませんか? →どこかのタイミングでここの変数の値が おかしくなってエラーが出る →その変数(状態)が変わる(ことができる)のが原因● 関数型らしいコードを書くことで、 変化する状態を最小限にすることができる (純粋関数型言語のHaskellなどは変数に再代入不可) 19/52
  20. 20. 関数型プログラミングってなんぞ?● イミュータブルの副次的な恩恵● テストがらくちんになる (状態を考慮したテストをする必要が なくなる) 20/52
  21. 21. 関数型プログラミングってなんぞ?● イミュータブルの副次的な恩恵● テストがらくちんになる (状態を考慮したテストをする必要が なくなる)● 並列処理がらくちんになる 状態を持たなければ、スレッドの同期や ロックなどを考慮する必要がなくなる →Scalaでは状態を持つ場合でも比較的簡単に並列処理を 行うためのActorライブラリというものもあります 21/52
  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/52
  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/52
  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/52
  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/52
  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/52
  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/52
  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/52
  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/52
  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/52
  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/52
  32. 32. 天領倉敷Scala って何? 32/52
  33. 33. 天領倉敷Scalaって何?● 岡山県倉敷市周辺でScalaの勉強会を行う コミュニティ● 「天領」…江戸時代における幕府の直轄領 倉敷市民がことあるごとに持ち上げる単語 →正直ウンザリする →皮肉を込めた(天領倉敷(笑))● ハッシュタグは「#tkscala」 岡山県内の勉強会コミュニティでも異彩を放つTL として一部で悪名高い● 次回は8/20(土)でーす 33/52
  34. 34. Scala勉強するのにどうしたらいいのさ 34/52
  35. 35. Scala勉強するのに どうしたらいいのさ 書籍● Scalaスケーラブルプログラミング [コンセプト&コーディング]● 通称コップ本● 聖典(Oderskyの著書)● キッチリ書いてある分難しい● あと高い(5k近くする)● が、買う価値はあり 35/52
  36. 36. Scala勉強するのに どうしたらいいのさ 書籍● Scalaプログラミング入門● Lift Frameworkの中の人 David Pollakの著書● 天領倉敷Scalaではこの本を ベースに学習しています● コップ本よりは読みやすい 36/52
  37. 37. Scala勉強するのに どうしたらいいのさ 書籍● プログラミングScala● 通称バク本● Twitter APIのリードプログラマーが 書いてる● 二冊目の本としてオススメの声多し 37/52
  38. 38. Scala勉強するのに どうしたらいいのさ 書籍● Scala実践プログラミング● 日本のScala界の巨匠が結集して 書かれた本● 新しい(先月出ました)● 和書なので読みやすい● 初心者向けはコレが鉄板かと● 上級者からは「物足りない」の声あり● ただし、他の本で触れられていない部分 についての解説あり (デザパタ・限定継続など…) 38/52
  39. 39. Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア● @kmizu Scalaエバンジェリストといえばこの人 ScalaDaysという世界のScala祭りで発表されてます! Scalaとか静的型付け vs 動的型付けなどの議論をMatzと繰 り広げる猛者● @yuroyoro 日本Scala界のスーパースター 最近ではほむほむ言語の中の人として脚光を浴びる 新作言語ウキャスがマジ宇宙語 39/52
  40. 40. Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア● @xuwei_k Scalaについてのエントリをブログで精力的に書いてる人 (OITEC版の資料でツッコミ頂きましたthx!) RubyKaigiでMatzに「Scalaの人ですね」的なことを言われ たとか● @keisuke_n 日本のScala祭り「Scala座」第一回主催 WebFlavorというScalaフレームワークの作者でもある 大都会岡山クラスタ 天領倉敷Scalaにも何度か来ていただきました 40/52
  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/52
  42. 42. 開発環境とかどんなのがあるのん? 42/52
  43. 43. 開発環境とか どんなのがあるのん? エディタ編● 実はデフォルトで色んなエディタ/IDE用の拡張がついてる geditとかtextmateとかxcodeとか… 43/52
  44. 44. 開発環境とか どんなのがあるのん? エディタ編● 実はデフォルトで色んなエディタ/IDE用の拡張がついてる geditとかtextmateとかxcodeとか…● とはいえ、vim or emacs ですよね! →エディタ宗教戦争だー!● vim codefellowとかneocmplecacheで補完が効いたりするらし いですよ(emacs派なのでわかりませんサーセン←)● emacs ENSIMEというのがありますよ奥さん 補完とかリファクタリングとか効いて結構強力 44/52
  45. 45. 開発環境とか どんなのがあるのん? IDE編● 以前はIDEサポートが実に残念であった…● 今では割と大丈夫なクオリティになったとか● IntelliJ IDEA 昔はこれくらいしかまともに使えるIDEがなかった →結果、今でも使ってる人が多い(気がする) sbt(後述)consoleがあるのもステキ 但し、無料版はAPサーバとの統合が無いので注意 45/52
  46. 46. 開発環境とか どんなのがあるのん? IDE編● Eclipse● NetBeans Java開発に於いては定番ですね 特にEclipseは昔はひっじょーーーーーに残念なクオリティ をしていましたが、今では結構大丈夫みたいです! (最近はちょろっとしか触ってないから良くわry) 46/52
  47. 47. 開発環境とか どんなのがあるのん? IDE編● Eclipse● NetBeans Java開発に於いては定番ですね 特にEclipseは昔はひっじょーーーーーに残念なクオリティ をしていましたが、今では結構大丈夫みたいです! (最近はちょろっとしか触ってないから良くわry)● という訳で、趣味で(というか、自分の手に 馴染むモノを)選んでいいかも? 47/52
  48. 48. 開発環境とか どんなのがあるのん? ビルドツール編● sbt(simple-build-tool)● Scalaのビルドツールはこれが鉄板● 一部では「酢豚」とか「サバト」の愛称で親しまれる● mavenのpom.xmlをScalaで書く感じだと言ったら 乱暴だろうか… (sbtのディレクトリ構成はmaven準拠で、連携可能)● Javaもビルドできる● ファイルの更新を検出して自動的にコンパイルしたり テストコード走らせたりとか 48/52
  49. 49. デモる?(時間の許す限り) 49/52
  50. 50. あと最後に● 魔法少女Scalaちゃん(@scalachan)を 今すぐフォロー! 50/52
  51. 51. あと最後に 一緒にF#やろうぜ! 51/52
  52. 52. あと最後に● 間違えた 一緒にScala やろうぜ! 52/52

×