SlideShare a Scribd company logo
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って何?
●   岡山県倉敷市周辺で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
     やろうぜ!
Ad

More Related Content

What's hot (20)

Scalalr
ScalalrScalalr
Scalalr
ichikaz3
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
Asami Abe
 
関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介
Asami Abe
 
Dark vol4 for_slideshare
Dark vol4 for_slideshareDark vol4 for_slideshare
Dark vol4 for_slideshare
ara_ta3
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
Kota Mizushima
 
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしようRxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Fumihiko Shiroyama
 
Sql world とは
Sql world とはSql world とは
Sql world とは
Oda Shinsuke
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
 
NoNoSQL
NoNoSQLNoNoSQL
NoNoSQL
Yuichiro Ebihara
 
リモートワークはじめたら前より良くなった!?
リモートワークはじめたら前より良くなった!?リモートワークはじめたら前より良くなった!?
リモートワークはじめたら前より良くなった!?
隆仁 平川
 
Sql world とは
Sql world とはSql world とは
Sql world とは
Oda Shinsuke
 
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
wpscala
 
Scala戦士を増やせ
Scala戦士を増やせScala戦士を増やせ
Scala戦士を増やせ
Yuto Suzuki
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
 
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Masayuki Morita
 
Sql world とは
Sql world とはSql world とは
Sql world とは
Oda Shinsuke
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
Mikiya Okuno
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
Asami Abe
 
関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介関西Java女子部とScala関西勉強会のご紹介
関西Java女子部とScala関西勉強会のご紹介
Asami Abe
 
Dark vol4 for_slideshare
Dark vol4 for_slideshareDark vol4 for_slideshare
Dark vol4 for_slideshare
ara_ta3
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
 
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
Kota Mizushima
 
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしようRxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
Fumihiko Shiroyama
 
Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
pocketberserker
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
 
リモートワークはじめたら前より良くなった!?
リモートワークはじめたら前より良くなった!?リモートワークはじめたら前より良くなった!?
リモートワークはじめたら前より良くなった!?
隆仁 平川
 
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
2010/11/16 WebプログラマのためのScala入門勉強会@渋谷
wpscala
 
Scala戦士を増やせ
Scala戦士を増やせScala戦士を増やせ
Scala戦士を増やせ
Yuto Suzuki
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
 
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話Railsバージョンアップを段階的に行うためにRails3/4並行稼動させる仕組みを作ってる話
Railsバージョンアップを 段階的に行うために Rails3/4並行稼動させる仕組み を作ってる話
Masayuki Morita
 
なぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのかなぜ、いまリレーショナルモデルなのか
なぜ、いまリレーショナルモデルなのか
Mikiya Okuno
 

Viewers also liked (17)

Presentació ICE UAB - Billy Elliot
Presentació ICE UAB - Billy ElliotPresentació ICE UAB - Billy Elliot
Presentació ICE UAB - Billy Elliot
rnavar33
 
Workshop wet braking
Workshop wet brakingWorkshop wet braking
Workshop wet braking
Estoril 2011
 
Mapa sonor
Mapa sonorMapa sonor
Mapa sonor
rnavar33
 
Teorias de conjunto
Teorias de conjuntoTeorias de conjunto
Teorias de conjunto
adisla
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
 
Labg social
Labg socialLabg social
Labg social
belenr88
 
Don't Turn Your Back on Bullying
Don't Turn Your Back on BullyingDon't Turn Your Back on Bullying
Don't Turn Your Back on Bullying
Lachlan Williams
 
Operaciones con números naturales
Operaciones con números naturalesOperaciones con números naturales
Operaciones con números naturales
adisla
 
Dekra tread wear methodology and results
Dekra tread wear methodology and resultsDekra tread wear methodology and results
Dekra tread wear methodology and results
Estoril 2011
 
Transparent proxy
Transparent proxyTransparent proxy
Transparent proxy
Muhammad Iqbal
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
 
Makalah pengauditan siklus pendanaan/pembelanjaan
Makalah pengauditan siklus pendanaan/pembelanjaanMakalah pengauditan siklus pendanaan/pembelanjaan
Makalah pengauditan siklus pendanaan/pembelanjaan
ghiyats dewantara
 
54414198 tutorial-pv-elite-2005 2
54414198 tutorial-pv-elite-2005 254414198 tutorial-pv-elite-2005 2
54414198 tutorial-pv-elite-2005 2
Muhammad Iqbal
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
 
Presentació ICE UAB - Billy Elliot
Presentació ICE UAB - Billy ElliotPresentació ICE UAB - Billy Elliot
Presentació ICE UAB - Billy Elliot
rnavar33
 
Workshop wet braking
Workshop wet brakingWorkshop wet braking
Workshop wet braking
Estoril 2011
 
Mapa sonor
Mapa sonorMapa sonor
Mapa sonor
rnavar33
 
Teorias de conjunto
Teorias de conjuntoTeorias de conjunto
Teorias de conjunto
adisla
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
 
Labg social
Labg socialLabg social
Labg social
belenr88
 
Don't Turn Your Back on Bullying
Don't Turn Your Back on BullyingDon't Turn Your Back on Bullying
Don't Turn Your Back on Bullying
Lachlan Williams
 
Operaciones con números naturales
Operaciones con números naturalesOperaciones con números naturales
Operaciones con números naturales
adisla
 
Dekra tread wear methodology and results
Dekra tread wear methodology and resultsDekra tread wear methodology and results
Dekra tread wear methodology and results
Estoril 2011
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
 
Makalah pengauditan siklus pendanaan/pembelanjaan
Makalah pengauditan siklus pendanaan/pembelanjaanMakalah pengauditan siklus pendanaan/pembelanjaan
Makalah pengauditan siklus pendanaan/pembelanjaan
ghiyats dewantara
 
54414198 tutorial-pv-elite-2005 2
54414198 tutorial-pv-elite-2005 254414198 tutorial-pv-elite-2005 2
54414198 tutorial-pv-elite-2005 2
Muhammad Iqbal
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
 
Ad

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

Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
Yasuyuki Maeda
 
本当に怖くないScala
本当に怖くないScala本当に怖くないScala
本当に怖くないScala
翔悟 竹川
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
amkt922
 
Scala.js
Scala.jsScala.js
Scala.js
ke-m kamekoopa
 
Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)
Hideaki Tarumi
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
第二回tento.tech定例会
第二回tento.tech定例会第二回tento.tech定例会
第二回tento.tech定例会
Sosuke Suzuki
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
takezoe
 
名古屋Scala勉強会のご紹介@OSC2010名古屋
名古屋Scala勉強会のご紹介@OSC2010名古屋名古屋Scala勉強会のご紹介@OSC2010名古屋
名古屋Scala勉強会のご紹介@OSC2010名古屋
Ryo RKTM
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメRuby使いのためのScalaのススメ
Ruby使いのためのScalaのススメ
Ouka Yuka
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
Taisuke Shiratori
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
 
本当に怖くないScala
本当に怖くないScala本当に怖くないScala
本当に怖くないScala
翔悟 竹川
 
Java使いにとっての関数
Java使いにとっての関数Java使いにとっての関数
Java使いにとっての関数
amkt922
 
Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)Futureのおまじないを理解する(LT)
Futureのおまじないを理解する(LT)
Hideaki Tarumi
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
第二回tento.tech定例会
第二回tento.tech定例会第二回tento.tech定例会
第二回tento.tech定例会
Sosuke Suzuki
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめ
takezoe
 
名古屋Scala勉強会のご紹介@OSC2010名古屋
名古屋Scala勉強会のご紹介@OSC2010名古屋名古屋Scala勉強会のご紹介@OSC2010名古屋
名古屋Scala勉強会のご紹介@OSC2010名古屋
Ryo RKTM
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
Ruby使いのためのScalaのススメ
Ruby使いのためのScalaのススメRuby使いのためのScalaのススメ
Ruby使いのためのScalaのススメ
Ouka Yuka
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
 
Ad

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

  • 2. 今から話す人の ざっくりとした説明 ● 角田裕樹(すみだゆうき) ● Hatena / id:razon ● Twitter / @razon ● ×ラゾン ○レゾン ◎しゾン ● 天領倉敷Scalaの言いだしっぺ ● 本業は Excel方眼紙er Javaプログラマ
  • 3. これからお話しすること ● Scalaってなんぞ ● 関数型プログラミングってなんぞ ● 天領倉敷Scalaって何? ● Scala勉強するのにどうすればいいのさ ● Excel方眼紙爆発しろ 以上をざっくりと解説します [エッセンシャル版]なので
  • 5. Scalaってなんぞ? ● スイス連邦工科大学(EPFL)のMartin Odersky が設計したプログラム言語 ● JVM上で動作する (コンパイルするとJavaのバイトコードになる) ※更新は止まっているが.NET向け実装 (scala-msil)もあり ● オブジェクト指向と関数型のハイブリッド ● 関数と言ってもExcel方眼紙ではない
  • 6. Scalaってなんぞ? ● JVM上で動くと何が嬉しいのん? →Javaとの相互利用が可能 →Javaの資源(ライブラリ・FW・ミドル) がそのまま利用可能 ・JDBCドライバ ・Servlet/JavaEEコンテナ ・などなど…
  • 7. Scalaってなんぞ? ● ちゃんとした所で使われてんの? →使われてます!
  • 8. Scalaってなんぞ? ● ちゃんとした所で使われてんの? →使われてます!
  • 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. 関数型プログラミングってなんぞ? ● その他、関数型言語ならではのステキ文化が 山ほどある →カリー化、部分適用 →クロージャ →パターンマッチ →遅延評価、無限リスト ● 時間がないので今回は割愛します
  • 19. 天領倉敷Scalaって何? ● 岡山県倉敷市周辺でScalaの勉強会を行う コミュニティ ● 「天領」…江戸時代における幕府の直轄領 倉敷市民がことあるごとに持ち上げる単語 →正直ウンザリする →皮肉を込めた(天領倉敷(笑)) ● ハッシュタグは「#tkscala」 岡山県内の勉強会コミュニティでも異彩を放つTL として一部で悪名高い ● 次回は8/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)を 今すぐフォロー!
  • 30. あと最後に ● 間違えた 一緒にScala やろうぜ!