Scalaで萌える
関数型プログラミング
 [エッセンシャル版]
今から話す人の
           ざっくりとした説明
●   角田裕樹(すみだゆうき)
●   Hatena / id:razon
●   Twitter / @razon
●   ×ラゾン ○レゾン ◎しゾン
●   天領倉敷Scalaの言いだしっぺ
●   本業は Excel方眼紙er Javaプログラマ
これからお話しすること
●   Scalaってなんぞ
●   関数型プログラミングってなんぞ
●   天領倉敷Scalaって何?
●   Scala勉強するのにどうすればいいのさ
●   Excel方眼紙爆発しろ
        以上をざっくりと解説します
         [エッセンシャル版]なので
Scalaってなんぞ?
Scalaってなんぞ?
●   スイス連邦工科大学(EPFL)のMartin Odersky
    が設計したプログラム言語
●   JVM上で動作する
    (コンパイルするとJavaのバイトコードになる)
    ※更新は止まっているが.NET向け実装
     (scala-msil)もあり
●   オブジェクト指向と関数型のハイブリッド
●   関数と言ってもExcel方眼紙ではない
Scalaってなんぞ?
●   JVM上で動くと何が嬉しいのん?
    →Javaとの相互利用が可能
     →Javaの資源(ライブラリ・FW・ミドル)
      がそのまま利用可能
      ・JDBCドライバ



     ・Servlet/JavaEEコンテナ



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

●   手続き型っぽい処理と比べると…
var sum = 0
for (i <- list) {
  if (i % 2 == 0) {
    sum += i * 2
  }
}
関数型プログラミングってなんぞ?
●   その他の特徴
●   イミュータブル!
    →作成後にその状態を変えることができない
●   えっそれ不便じゃね…?
    →覚えがありませんか?
    →どこかのタイミングでここの変数の値が
     おかしくなってエラーが出る
    →その変数(状態)が変わる(ことができる)のが悪い
●   関数型らしいコードを書くことで、
    変化する状態を最小限にすることができる
    (純粋関数型言語のHaskellなどは
     そもそも再定義可能な変数がない)
関数型プログラミングってなんぞ?
●   イミュータブルの副次的な恩恵
●   テストがらくちんになる
    (状態を考慮したテストをする必要が
     なくなる)
●   並列処理がらくちんになる
    状態を持たなければ、スレッドの同期や
    ロックなどを考慮する必要がなくなる
    →Scalaでは状態を持つ場合でも比較的簡単に並列処理を
     行うためのActorライブラリというものもあります
関数型プログラミングってなんぞ?
●   その他、関数型言語ならではのステキ文化が
    山ほどある
    →カリー化、部分適用
    →クロージャ
    →パターンマッチ
    →遅延評価、無限リスト
●   時間がないので今回は割愛します
天領倉敷Scala
 って何?
天領倉敷Scalaって何?
●   岡山県倉敷市周辺でScalaの勉強会を行う
    コミュニティ
●   「天領」…江戸時代における幕府の直轄領
    倉敷市民がことあるごとに持ち上げる単語
    →正直ウンザリする
    →皮肉を込めた(天領倉敷(笑))
●   ハッシュタグは「#tkscala」
    岡山県内の勉強会コミュニティでも異彩を放つTL
    として一部で悪名高い
●   次回は8/20(土)でーす
Scala勉強するのに
どうしたらいいのさ
Scala勉強するのに
         どうしたらいいのさ
    書籍
●   Scalaスケーラブルプログラミング
    [コンセプト&コーディング]
●   通称コップ本
●   聖典(Oderskyの著書)
●   キッチリ書いてある分難しい
●   あと高い(5k近くする)
●   が、買う価値はあり
Scala勉強するのに
           どうしたらいいのさ
    書籍
●
    Scalaプログラミング入門
●   Lift Frameworkの中の人
    David Pollakの著書
●   天領倉敷Scalaではこの本を
    ベースに学習しています
●   コップ本よりは読みやすい
Scala勉強するのに
          どうしたらいいのさ
    書籍
●   プログラミングScala
●   通称バク本
●   Twitter APIのリードプログラマーが
    書いてる
●   二冊目の本としてオススメの声多し
Scala勉強するのに
         どうしたらいいのさ
    書籍
●
    Scala実践プログラミング
●   日本のScala界の巨匠が結集して
    書かれた本
●   新しい(先月出ました)
●   和書なので読みやすい
●   初心者向けはコレが鉄板かと
●   上級者からは「物足りない」の声あり
●   ただし、他の本で触れられていない部分
    についての解説あり
    (デザパタ・限定継続など…)
Scala勉強するのに
         どうしたらいいのさ
    フォローするべきScalaスーパーエンジニア
●   @kmizu
    Scalaエバンジェリストといえばこの人
    ScalaDaysという世界のScala祭りで発表する
    (もち英語で)スペックの持ち主
    Scala絡みとなるとMatzにも噛み付く猛者
●   @yuroyoro
    日本Scala界のスーパースター
    が、前述の本の評判が響いてScalaから遠ざかり中…
    最近ではほむほむ言語の中の人として脚光を浴びる
●   @xuwei_k
    多分ここ最近では日本で一番Scalaについてのブログ記事を
    書いてる人
Scala勉強するのに
             どうしたらいいのさ
    フォローするべきScalaスーパーエンジニア
●   @keisuke_n
    日本のScala祭り「Scala座」第一回主催
    WebFlavorというScalaフレームワークの作者でもある
    大都会岡山クラスタ
    天領倉敷Scalaにも何度か来ていただきました
●   @a_hisame, @asami224, @bleis, @cooldaemon, @cpp_akira,
    @halcat0x15a, @hito_asa, @j5ik2o, @kaigaiengineer,
    @katzchang, @keigoi, @maeda_, @maiha, @mumoshu, @mzp,
    @NetPenguin, @nosen, @nouvellelune, @osiire, @papamitra,
    @PG_kura, @pomu0325, @rf0444, @RKTM, @ryugate,
    @ScalaTohoku, @shomah4a, @takedasoft, @terurou,
    @yasushia, @ymnk, @yoshihiro503
あと最後に
●   7/17(日)のオープンラボ備後にて、
    今回のLTの完全版やります!
●   何か1時間くらい割り当てられちゃってるん
    ですけど…
●   という訳で興味があったら来てね!
あと最後に
●   魔法少女Scalaちゃん(@scalachan)を
    今すぐフォロー!
Excel方眼紙
 爆発しろ!
あと最後に
●   間違えた


     一緒にScala
     やろうぜ!

Scalaで萌える関数型プログラミング[エッセンシャル版]

  • 1.
  • 2.
    今から話す人の ざっくりとした説明 ● 角田裕樹(すみだゆうき) ● Hatena / id:razon ● Twitter / @razon ● ×ラゾン ○レゾン ◎しゾン ● 天領倉敷Scalaの言いだしっぺ ● 本業は Excel方眼紙er Javaプログラマ
  • 3.
    これからお話しすること ● Scalaってなんぞ ● 関数型プログラミングってなんぞ ● 天領倉敷Scalaって何? ● Scala勉強するのにどうすればいいのさ ● Excel方眼紙爆発しろ 以上をざっくりと解説します [エッセンシャル版]なので
  • 4.
  • 5.
    Scalaってなんぞ? ● スイス連邦工科大学(EPFL)のMartin Odersky が設計したプログラム言語 ● JVM上で動作する (コンパイルするとJavaのバイトコードになる) ※更新は止まっているが.NET向け実装 (scala-msil)もあり ● オブジェクト指向と関数型のハイブリッド ● 関数と言ってもExcel方眼紙ではない
  • 6.
    Scalaってなんぞ? ● JVM上で動くと何が嬉しいのん? →Javaとの相互利用が可能 →Javaの資源(ライブラリ・FW・ミドル) がそのまま利用可能 ・JDBCドライバ ・Servlet/JavaEEコンテナ ・などなど…
  • 7.
    Scalaってなんぞ? ● ちゃんとした所で使われてんの? →使われてます!
  • 8.
    Scalaってなんぞ? ● ちゃんとした所で使われてんの? →使われてます!
  • 9.
  • 10.
    関数型プログラミングってなんぞ? ● 元々はラムダ計算の概念をプログラミング言 語として体現したもの →理論計算機科学や数理論理学における、 関数の定義と実行を抽象化した計算体系 ● ご先祖様はLISP ● 関数がファーストオブジェクト →関数を変数に格納できる →関数を引数の値として指定できる →関数を戻り値として指定できる ● =高階関数!
  • 11.
    関数型プログラミングってなんぞ? ● で、何がうれしいのん? ● 関数型言語といえば、コレクションの操作! 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
  • 12.
    関数型プログラミングってなんぞ? ● 入力に対し、関数をチェーンすることで 出力形式に変換していく scala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _) res4: Int = 12
  • 13.
    関数型プログラミングってなんぞ? ● 入力に対し、関数をチェーンすることで 出力形式に変換していく scala> list.filter(_ % 2 == 0).map(_ * 2).reduceLeft(_ + _) res4: Int = 12 ● 手続き型っぽい処理と比べると… var sum = 0 for (i <- list) { if (i % 2 == 0) { sum += i * 2 } }
  • 14.
    関数型プログラミングってなんぞ? ● その他の特徴 ● イミュータブル! →作成後にその状態を変えることができない ● えっそれ不便じゃね…? →覚えがありませんか? →どこかのタイミングでここの変数の値が おかしくなってエラーが出る →その変数(状態)が変わる(ことができる)のが悪い ● 関数型らしいコードを書くことで、 変化する状態を最小限にすることができる (純粋関数型言語のHaskellなどは そもそも再定義可能な変数がない)
  • 15.
    関数型プログラミングってなんぞ? ● イミュータブルの副次的な恩恵 ● テストがらくちんになる (状態を考慮したテストをする必要が なくなる) ● 並列処理がらくちんになる 状態を持たなければ、スレッドの同期や ロックなどを考慮する必要がなくなる →Scalaでは状態を持つ場合でも比較的簡単に並列処理を 行うためのActorライブラリというものもあります
  • 16.
    関数型プログラミングってなんぞ? ● その他、関数型言語ならではのステキ文化が 山ほどある →カリー化、部分適用 →クロージャ →パターンマッチ →遅延評価、無限リスト ● 時間がないので今回は割愛します
  • 18.
  • 19.
    天領倉敷Scalaって何? ● 岡山県倉敷市周辺でScalaの勉強会を行う コミュニティ ● 「天領」…江戸時代における幕府の直轄領 倉敷市民がことあるごとに持ち上げる単語 →正直ウンザリする →皮肉を込めた(天領倉敷(笑)) ● ハッシュタグは「#tkscala」 岡山県内の勉強会コミュニティでも異彩を放つTL として一部で悪名高い ● 次回は8/20(土)でーす
  • 20.
  • 21.
    Scala勉強するのに どうしたらいいのさ 書籍 ● Scalaスケーラブルプログラミング [コンセプト&コーディング] ● 通称コップ本 ● 聖典(Oderskyの著書) ● キッチリ書いてある分難しい ● あと高い(5k近くする) ● が、買う価値はあり
  • 22.
    Scala勉強するのに どうしたらいいのさ 書籍 ● Scalaプログラミング入門 ● Lift Frameworkの中の人 David Pollakの著書 ● 天領倉敷Scalaではこの本を ベースに学習しています ● コップ本よりは読みやすい
  • 23.
    Scala勉強するのに どうしたらいいのさ 書籍 ● プログラミングScala ● 通称バク本 ● Twitter APIのリードプログラマーが 書いてる ● 二冊目の本としてオススメの声多し
  • 24.
    Scala勉強するのに どうしたらいいのさ 書籍 ● Scala実践プログラミング ● 日本のScala界の巨匠が結集して 書かれた本 ● 新しい(先月出ました) ● 和書なので読みやすい ● 初心者向けはコレが鉄板かと ● 上級者からは「物足りない」の声あり ● ただし、他の本で触れられていない部分 についての解説あり (デザパタ・限定継続など…)
  • 25.
    Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア ● @kmizu Scalaエバンジェリストといえばこの人 ScalaDaysという世界のScala祭りで発表する (もち英語で)スペックの持ち主 Scala絡みとなるとMatzにも噛み付く猛者 ● @yuroyoro 日本Scala界のスーパースター が、前述の本の評判が響いてScalaから遠ざかり中… 最近ではほむほむ言語の中の人として脚光を浴びる ● @xuwei_k 多分ここ最近では日本で一番Scalaについてのブログ記事を 書いてる人
  • 26.
    Scala勉強するのに どうしたらいいのさ フォローするべきScalaスーパーエンジニア ● @keisuke_n 日本のScala祭り「Scala座」第一回主催 WebFlavorというScalaフレームワークの作者でもある 大都会岡山クラスタ 天領倉敷Scalaにも何度か来ていただきました ● @a_hisame, @asami224, @bleis, @cooldaemon, @cpp_akira, @halcat0x15a, @hito_asa, @j5ik2o, @kaigaiengineer, @katzchang, @keigoi, @maeda_, @maiha, @mumoshu, @mzp, @NetPenguin, @nosen, @nouvellelune, @osiire, @papamitra, @PG_kura, @pomu0325, @rf0444, @RKTM, @ryugate, @ScalaTohoku, @shomah4a, @takedasoft, @terurou, @yasushia, @ymnk, @yoshihiro503
  • 27.
    あと最後に ● 7/17(日)のオープンラボ備後にて、 今回のLTの完全版やります! ● 何か1時間くらい割り当てられちゃってるん ですけど… ● という訳で興味があったら来てね!
  • 28.
    あと最後に ● 魔法少女Scalaちゃん(@scalachan)を 今すぐフォロー!
  • 29.
  • 30.
    あと最後に ● 間違えた 一緒にScala やろうぜ!