SlideShare a Scribd company logo
1 of 53
Download to read offline
Scala会議倉敷サテライト
 Scalaで萌える
関数型プログラミング
    [1.1.RC1]


                 1/53
前回までのあらすじ
●   7/9(土)のOITECでScalaについてのLTを
    やったのであった!
●   更に7/17(日)オープンラボ備後で完全版の
    セッションをやった!
●   今回はその再放送版です
    (若干新しい情報を盛り込んだりしてます)
●   OITECで実践F#をもらったのでちょっと
    なびいたのはここだけの秘密だ!


                                 2/53
今から話す人の
           ざっくりとした説明
●   角田裕樹(すみだゆうき)
●   Hatena / id:razon
●   Twitter / @razon
●   ×ラゾン ○レゾン ◎しゾン
●   天領倉敷Scalaの言いだしっぺ
●   本業はJavaプログラマ
    その時々で他のことも結構やってるけど…


                          3/53
これからお話しすること
●   Scalaってなんぞ
●   関数型プログラミングってなんぞ
●   天領倉敷Scalaって何?
●   Scala勉強するのにどうすればいいのさ
●   開発環境とかどんなのがあるのん?
●   時間が余ったらライブコーディングとか?



                           4/53
Scalaってなんぞ?


              5/53
Scalaってなんぞ?
●   スイス連邦工科大学(EPFL)のMartin Odersky
    が設計したプログラム言語
●   JVM上で動作する
    (コンパイルするとJavaのバイトコードになる)
    ※.NET向け実装をMS支援のもと絶賛開発中
    →VisualStudioで開発できるとか(な、なんd(ry
    →IKVMベース(.Net上で動くJava実装)
●   オブジェクト指向と関数型のハイブリッド



                                     6/53
Scalaってなんぞ?
●   JVM上で動くと何が嬉しいのん?
    →Javaとの相互利用が可能
     →Javaの資源(ライブラリ・FW・ミドル)
      がそのまま利用可能
      ・JDBCドライバ



     ・Servlet/JavaEEコンテナ



     ・などなど…
                              7/53
Scalaってなんぞ?
●   ちゃんとした所で使われてんの?
    →使われてます!




                      8/53
Scalaってなんぞ?
●   ちゃんとした所で使われてんの?
    →使われてます!




                      9/53
関数型プログラミング
  ってなんぞ?


             10/53
関数型プログラミングってなんぞ?
●   元々はラムダ計算の概念をプログラミング言
    語として体現したもの
    →理論計算機科学や数理論理学における、
     関数の定義と実行を抽象化した計算体系
●   ご先祖様はLISP
●   関数がファーストオブジェクト
    →関数を変数に格納できる
    →関数を引数の値として指定できる
    →関数を戻り値として指定できる


                           11/53
関数型プログラミングってなんぞ?
●   元々はラムダ計算の概念をプログラミング言
    語として体現したもの
    →理論計算機科学や数理論理学における、
     関数の定義と実行を抽象化した計算体系
●   ご先祖様はLISP
●   関数がファーストオブジェクト
    →関数を変数に格納できる
    →関数を引数の値として指定できる
    →関数を戻り値として指定できる
●   =高階関数!
                           12/53
関数型プログラミングってなんぞ?
●   で、何がうれしいのん?
●   関数型言語といえば、コレクションの操作!
scala> val list = 1 :: 5 :: 2 :: 3 :: 4 :: Nil
list: 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
関数型プログラミングってなんぞ?
●   入力に対し、関数をチェーンすることで
    出力形式に変換していく
scala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)
res4: Int = 12




                                                              14/53
関数型プログラミングってなんぞ?
●   入力に対し、関数をチェーンすることで
    出力形式に変換していく
scala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)
res4: Int = 12

●   手続き型っぽい処理と比べると…
var sum = 0
for (i <- list) {
  if (i % 2 == 0) {
    sum += i * 2
  }
}

                                                              15/53
関数型プログラミングってなんぞ?
●   入力に対し、関数をチェーンすることで
    出力形式に変換していく
scala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _)
res4: Int = 12
                 抽出              変換             集計
●   手続き型っぽい処理と比べると…
var sum = 0
for (i <- list) {
  if (i % 2 == 0) {
    sum += i * 2
  }
}
    抽出 集計 変換

                                                              16/53
関数型プログラミングってなんぞ?
●   イミュータブル!
    →作成後にその状態を変えることができない




                           17/53
関数型プログラミングってなんぞ?
●   イミュータブル!
    →作成後にその状態を変えることができない
●   えっそれ不便じゃね…?
    →覚えがありませんか?
    →どこかのタイミングでここの変数の値が
     おかしくなってエラーが出る
    →その変数(状態)が変わる(ことができる)のが原因




                                18/53
関数型プログラミングってなんぞ?
●   イミュータブル!
    →作成後にその状態を変えることができない
●   えっそれ不便じゃね…?
    →覚えがありませんか?
    →どこかのタイミングでここの変数の値が
     おかしくなってエラーが出る
    →その変数(状態)が変わる(ことができる)のが原因
●   関数型らしいコードを書くことで、
    変化する状態を最小限にすることができる
    (純粋関数型言語のHaskellなどは変数に再代入不可)




                                   19/53
関数型プログラミングってなんぞ?
●   イミュータブルの副次的な恩恵
●   テストがらくちんになる
    (状態を考慮したテストをする必要が
     なくなる)




                        20/53
関数型プログラミングってなんぞ?
●   イミュータブルの副次的な恩恵
●   テストがらくちんになる
    (状態を考慮したテストをする必要が
     なくなる)
●   並列処理がらくちんになる
    状態を持たなければ、スレッドの同期や
    ロックなどを考慮する必要がなくなる
    →Scalaでは状態を持つ場合でも比較的簡単に並列処理を
     行うためのActorライブラリというものもあります




                                   21/53
関数型プログラミングってなんぞ?
●   カリー化と部分適用
●   カリー化!
scala> def add(x: Int, y: Int) = x + y
add: (x: Int, y: Int)Int
↓
scala> def add(x: Int)(y: Int) = x + y
add: (x: Int)(y: Int)Int




                                         22/53
関数型プログラミングってなんぞ?
●   カリー化と部分適用
●   カリー化!
scala> def add(x: Int, y: Int) = x + y
add: (x: Int, y: Int)Int
↓
scala> def add(x: Int)(y: Int) = x + y
add: (x: Int)(y: Int)Int

●   部分適用!
scala> def inc = add(1)_
inc: (Int) => Int

●   その名のとおり、関数の引数の一部を適用
    した新たな関数を作ることができる
                                         23/53
関数型プログラミングってなんぞ?
●   部分適用した関数を使ってみる
scala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
list: List[Int] = List(1, 2, 3, 4, 5)

scala> list.map(inc)
res1: List[Int] = List(2, 3, 4, 5, 6)




                                                 24/53
関数型プログラミングってなんぞ?
●   部分適用した関数を使ってみる
scala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
list: 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 + y
add: (x: Int, y: Int)Int

scala> list.map(add(1, _))
res2: List[Int] = List(2, 3, 4, 5, 6)

                                                 25/53
関数型プログラミングってなんぞ?
●   遅延評価
●   lazy val
scala> val v = {println("Hello val !"); 0}
Hello val !
v: Int = 0

scala> lazy val lVal = {println("Hello lazy val !"); 0}
lVal: Int = <lazy>

scala> println(lVal)
Hello lazy val !
0

scala> println(lVal)
0

                                                          26/53
関数型プログラミングってなんぞ?
●   遅延評価
●   名前渡し引数
scala> val list = 1 :: 2 :: 3 :: 4 :: 5 :: Nil
list: List[Int] = List(1, 2, 3, 4, 5)

scala> val itr = list.iterator
itr: Iterator[Int] = non-empty iterator

scala> def hello(i: => Int) = {
     |   println("Excel方眼紙爆発しろ " + i)
     |   println("Excel方眼紙爆発しろ " + i)}
hello: (i: => Int)Unit

scala> hello(itr.next)
Excel方眼紙爆発しろ 1
Excel方眼紙爆発しろ 2
                                                 27/53
関数型プログラミングってなんぞ?
●   遅延評価
●   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 toList
res11: List[Int] = List(10, 11, 12, 13, 14)




                                                28/53
関数型プログラミングってなんぞ?
●   パターンマッチ!
●   型別に振り分けてみる
scala> def judgeType(in: Any) = in match {
     |   case _: String => "String!"
     |   case _: Int => "Int!"
     |   case _ => "Other!"
     | }
judgeType: (in: Any)java.lang.String

scala> 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
関数型プログラミングってなんぞ?
●   パターンマッチ!
●   定番のFizzBuzz
scala> 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)Any

scala> 1 to 20 map fizzbuzz
res1: 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
関数型プログラミングってなんぞ?
●   パターンマッチ!
●   CaseClassと組み合わせて
scala> case class Person(name: String, sex: String, age: Int)
defined class Person

scala> 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.String

scala> judgePerson(Person("razonの娘", "female", 2))
res1: java.lang.String = razonの娘:幼女




                                                                        31/53
天領倉敷Scala
 って何?

            32/53
天領倉敷Scalaって何?
●   岡山県倉敷市周辺でScalaの勉強会を行う
    コミュニティ
●   「天領」…江戸時代における幕府の直轄領
    倉敷市民がことあるごとに持ち上げる単語
    →正直ウンザリする
    →皮肉を込めた(天領倉敷(笑))
●   ハッシュタグは「#tkscala」
    岡山県内の勉強会コミュニティでも異彩を放つTL
    として一部で悪名高い
●   次回は8/20(土)でーす
                              33/53
Scala勉強するのに
どうしたらいいのさ

              34/53
Scala勉強するのに
         どうしたらいいのさ
    書籍
●   Scalaスケーラブルプログラミング
    [コンセプト&コーディング]
●   通称コップ本
●   聖典(Oderskyの著書)
●   キッチリ書いてある分難しい
●   あと高い(5k近くする)
●   が、買う価値はあり
●   9/27に第2版が発売(予定)なので、そちらをどうぞ

                                 35/53
Scala勉強するのに
           どうしたらいいのさ
    書籍
●
    Scalaプログラミング入門
●   Lift Frameworkの中の人
    David Pollakの著書
●   天領倉敷Scalaではこの本を
    ベースに学習しています
●   コップ本よりは読みやすい




                         36/53
Scala勉強するのに
          どうしたらいいのさ
    書籍
●   プログラミングScala
●   通称バク本
●   Twitter APIのリードプログラマーが
    書いてる
●   二冊目の本としてオススメの声多し




                             37/53
Scala勉強するのに
         どうしたらいいのさ
    書籍
●
    Scala実践プログラミング
●   日本のScala界の巨匠が結集して
    書かれた本
●   新しい(先月出ました)
●   和書なので読みやすい
●   初心者向けはコレが鉄板かと
●   上級者からは「物足りない」の声あり
●   ただし、他の本で触れられていない部分
    についての解説あり
    (デザパタ・限定継続など…)
                         38/53
Scala勉強するのに
         どうしたらいいのさ
    フォローするべきScalaスーパーエンジニア
●   @kmizu
    Scalaエバンジェリストといえばこの人
    ScalaDaysという世界のScala祭りで発表されてます!
    Scalaとか静的型付け vs 動的型付けなどの議論をMatzと繰
    り広げる猛者
●   @yuroyoro
    日本Scala界のスーパースター
    最近ではほむほむ言語の中の人として脚光を浴びる
    新作言語ウキャスがマジ宇宙語



                                        39/53
Scala勉強するのに
         どうしたらいいのさ
    フォローするべきScalaスーパーエンジニア
●   @xuwei_k
    Scalaについてのエントリをブログで精力的に書いてる人
    (OITEC版の資料でツッコミ頂きましたthx!)
    RubyKaigiでMatzに「Scalaの人ですね」的なことを言われ
    たとか
●   @keisuke_n
    日本のScala祭り「Scala座」第一回主催
    WebFlavorというScalaフレームワークの作者でもある
    大都会岡山クラスタ
    天領倉敷Scalaにも何度か来ていただきました


                                          40/53
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
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/53
開発環境とか
       どんなのがあるのん?
    エディタ編
●
    実はデフォルトで色んなエディタ/IDE用の拡張がついてる
    geditとかtextmateとかxcodeとか…




                                   44/53
開発環境とか
            どんなのがあるのん?
    エディタ編
●
    実はデフォルトで色んなエディタ/IDE用の拡張がついてる
    geditとかtextmateとかxcodeとか…
●   とはいえ、vim or emacs ですよね!
    →エディタ宗教戦争だー!
●   vim
    codefellowとかneocmplecacheで補完が効いたりするらし
    いですよ(emacs派なのでわかりませんサーセン←)
●   emacs
    ENSIMEというのがありますよ奥さん
    補完とかリファクタリングとか効いて結構強力
                                            45/53
開発環境とか
           どんなのがあるのん?
    IDE編
●   以前はIDEサポートが実に残念であった…
●   今では割と大丈夫なクオリティになったとか
●   IntelliJ IDEA
    昔はこれくらいしかまともに使えるIDEがなかった
    →結果、今でも使ってる人が多い(気がする)
    sbt(後述)consoleがあるのもステキ
    但し、無料版はAPサーバとの統合が無いので注意




                               46/53
開発環境とか
           どんなのがあるのん?
    IDE編
●   Eclipse
●   NetBeans
    Java開発に於いては定番ですね
    特にEclipseは昔はひっじょーーーーーに残念なクオリティ
    をしていましたが、今では結構大丈夫みたいです!
    (最近はちょろっとしか触ってないから良くわry)




                                     47/53
開発環境とか
           どんなのがあるのん?
    IDE編
●   Eclipse
●   NetBeans
    Java開発に於いては定番ですね
    特にEclipseは昔はひっじょーーーーーに残念なクオリティ
    をしていましたが、今では結構大丈夫みたいです!
    (最近はちょろっとしか触ってないから良くわry)
●   という訳で、趣味で(というか、自分の手に
    馴染むモノを)選んでいいかも?


                                     48/53
開発環境とか
          どんなのがあるのん?
    ビルドツール編
●   sbt(simple-build-tool)
●   Scalaのビルドツールはこれが鉄板
●   一部では「酢豚」とか「サバト」の愛称で親しまれる
●   mavenのpom.xmlをScalaで書く感じだと言ったら
    乱暴だろうか…
    (sbtのディレクトリ構成はmaven準拠で、連携可能)
●   Javaもビルドできる
●   ファイルの更新を検出して自動的にコンパイルしたり
    テストコード走らせたりとか

                                     49/53
デモる?
(時間の許す限り)


            50/53
あと最後に
●   魔法少女Scalaちゃん(@scalachan)を
    今すぐフォロー!




                                51/53
あと最後に



 一緒にF#
やろうぜ!
         52/53
あと最後に
●   間違えた


     一緒にScala
     やろうぜ!
                   53/53

More Related Content

What's hot

Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料Toshio Ehara
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返るHiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返るtsudaa
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章YOSHIKAWA Ryota
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream APIdcomsolution
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 

What's hot (20)

Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Java電卓勉強会資料
Java電卓勉強会資料Java電卓勉強会資料
Java電卓勉強会資料
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
HiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返るHiroshimaJUG の「Java8 Lambda ハンズオン with すごい広島」を5分で振り返る
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
Phantom Type in Scala
Phantom Type in ScalaPhantom Type in Scala
Phantom Type in Scala
 
Clojure
ClojureClojure
Clojure
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
What is template
What is templateWhat is template
What is template
 
Thinking in Cats
Thinking in CatsThinking in Cats
Thinking in Cats
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 

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

Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Ra Zon
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングJun Saito
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてtnoda
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーるSachiko Hirata
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming ParadigmCookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming ParadigmMinero Aoki
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)Ryuichi ITO
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理Hiroyoshi Komatsu
 

Similar to Scalaで萌える関数型プログラミング[1.1.RC1] (20)

Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]Scalaで萌える関数型プログラミング[エッセンシャル版]
Scalaで萌える関数型プログラミング[エッセンシャル版]
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R についてShibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R について
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming ParadigmCookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
scala.collection 再入門 (改)
scala.collection 再入門 (改)scala.collection 再入門 (改)
scala.collection 再入門 (改)
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

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

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