SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
Pythonista による
Pythonista のための
    Scala 紹介


2011/09/30 BPStudy #49 Scala 祭り


           しょうま
        @shomah4a
       Id:shomah4a
           BPStudy #49
内容
●   自己紹介
●   Scala ってどんな言語?
●   どこで使われている?
●   動的型付け・静的型付け
●   型推論
●   関数型なにそれおいしいの?
●   Python と Scala
●   開発環境について
●   その他
                     BPStudy #49
お前、誰よ
●   しょうま(@shomah4a)
●   今月頭から Java の会社
    ●   仕事では今は Python 使ってます。と思ったらそうでもなくなった
    ●   Java とかよくわかりません
●   Scala を始めたきっかけは面白そうだったから
    ●   Android 開発で Java 使いたくないってのも
●   言語遍歴
    ●   Basic -> VB -> (C ->) C++ -> Python(, Haskell, Erlang,
        OCaml, Scheme) -> Scala
●   Python 界隈の人

                               BPStudy #49
Scala とはなんぞや?




    BPStudy #49
Scala とは
●   Scala ... はオブジェクト指向言語と関数型言語の
    特徴を統合したマルチパラダイムのプログラミング
    言語である。(wikipedia)
●   最新版は 2.9.1
●   静的型付けなコンパイル型言語
    ●   コンパイル遅い…
●   省コード
    ●   Java とか冗長でめんどくs(ry

                   BPStudy #49
Scala とは
●   標準ライブラリ
    ●   collection
    ●   JSON
    ●   Stream
●   Web Framework
    ●   Lift, Play, BlueEyes, ... その他諸々




                          BPStudy #49
Scala とは
●   JVM で動く
    ●   Android の Dalvik VM でも動くよ!
    ●   Java のライブラリをそのまま使える
        –   でも…
●   .NET CLR もサポートしているらしいけど開発止まってる…
●   LL です!
    ●   REPL もあるよ!
    ●   LL Tiger にもいたよ!

                       BPStudy #49
Scala とは
●   並行処理
    ●   Actor モデル
        –   Erlang の Process
        –   Message Passing でデータをやり取りし、共有メモリを排する
        –   Python の multiprocessing が似たようなインタフェイス
    ●   STM (Software Transaction Memory)
        –   共有メモリに対するアクセス制御の方法
        –   Haskell とか Clojure とか
        –   PyPy でも GIL を取り除くために注目されたり
●   このあたりは @cooldaemon さんが詳しい
●   http://d.hatena.ne.jp/cooldaemon/
                          BPStudy #49
どんなところで使われている?
●   大体 Web 系
    ●   Twitter, Foursquare, Remember the Milk, etc...
●   国内だと GMO メディア, ドワンゴ[要出典]など
●   Android
    ●   個人的に一個作りました




                          BPStudy #49
マスコットキャラクタ
●   @scalachan




                 BPStudy #49
Java と Scala




   BPStudy #49
Java と Scala
●   よく言われる「JVM で動くから Java の遺産資産使
    えるよね」という話
    ●   Java のライブラリを使うとその部分は Java っぽくなら
        ざるを得ない
    ●   Scala っぽく書くために Wrapper はほしい
●   Better Java としてしか Scala を使わないのはどう
    なの?
    ●   C++ != Better C


                          BPStudy #49
静的型付けと動的型付け




    BPStudy #49
動的型付けとは
●   変数の型が実行時に決まる
    ●   実行時の変数の中身次第
●   大抵インタプリタ型
●   メリット
    ●   文法チェックだけでコンパイルしないで実行できる
    ●   ゆるふわ
●   デメリット
    ●   動かしてみないと型の間違いがあってもエラーが出ない

                 BPStudy #49
静的型付け
●   変数の型がコンパイル時に決まる
    ●   大抵コンパイル型の言語
●   メリット
    ●   型エラーは実行前に発見できる
    ●   動的型付けより堅牢
●   デメリット
    ●   型書かないといけない
    ●   ゆるふわじゃない

                 BPStudy #49
でも、めんどくさいんでしょう?




     BPStudy #49
Scala には型付けを楽にするための仕組みが沢山




          BPStudy #49
総称型
●   Generics
    ●   クラス・関数に型パラメータを付与し、様々な型に対して
        同じ処理を書けるようにする
    ●   Java からある
    ●   C++ のテンプレートのつもりで使うとハマる
        –   テンプレートと違って単純置換じゃない
●   def add[T](left:T, right:T) = {...}



                         BPStudy #49
型とか
●   Python               ●      Scala
●   Duck Typing          ●      Structural Subtyping
    ●   実行時に動的に属性を              ●   特定の属性を持つとい
        見る                          う型を定義可能
    ●   メソッド・属性の有無に             ●   http://d.hatena.ne.jp/yu
        関係なく動的に解決す              ●   皿うどん
        るので実行時にエラー
        が出る可能性                  ●   OCaml からパクッた



                  BPStudy #49
型推論
●   変数定義時や関数定義時に、文脈から型を推測し
    て変数や関数の型を決める仕組み
    ●   val x = 10 と書いてあれば x が Int であると推論する
    ●   Java なんかだと int x とか書かないといけない。
    ●   SomeClass x = new SomeClass(...)
        –   SomeClass が二回出るのって無駄じゃね?
    ●   val x = new SomeClass(...)
        –   すっきり
        –   変更するときに書き換える箇所が少ない


                         BPStudy #49
関数型
●   関数型言語は、広い意味ではファーストクラスの関
    数オブジェクトを持つ言語である。また、純粋関数型
    言語では、全ての関数が副作用を持たない。関数
    型言語の多くは、カリー化、遅延評価などの機能を
    備えている。また、静的型付けの物の多くは型推論
    の機能を持つ。(wikipedia)
●   広い意味では Python も関数型の特徴がある
    ●   関数オブジェクト
    ●   高階関数(map, filter, reduce)
    ●   デコレータ(関数を受け取って関数を返す高階関数)
                  BPStudy #49
Scala の関数型
●   ファーストクラスの関数オブジェクト
●   無名関数
●   カリー化
●   遅延評価
●   パターンマッチ
    ●   case class で拡張できる
●   末尾再帰最適化
    ●   相互末尾再帰は未サポート

                      BPStudy #49
それ以外
●   限定継続
    ●   Scalaの限定継続の基本と応用in高橋メソッド
    ●   by @kmizu
    ●   http://www.slideshare.net/kmizushima/scala-83454
●   コンパイラプラグイン
    ●   モテモテコンパイラプラグイン by @kiris
    ●   http://www.slideshare.net/kiris60/motemote-compil



                         BPStudy #49
Python と Scala




    BPStudy #49
ソースを見てみる




  BPStudy #49
例: 1〜100 をプリントする
●   Scala
    ●   0 to 100 foreach {x=> println(x)}
    ●   0.to(100).foreach(println)
●   Python
    ●   for i in xrange(101): print i
    ●   for i in range(101): print(i)
●   Ruby
    ●   0.upto(100).each {|i| puts(i)}

                         BPStudy #49
Ruby の方が似てね?




    BPStudy #49
fizzbuzz.scala
0 to 100 foreach (i =>{
   if (i % 3 == 0)
     {
       print("fizz")
     }
   if (i % 5 == 0)
     {
       print("buzz")
     }
   if (i % 5 != 0 && i % 3 != 0)
     {
       print(i)
     }
   println("")
})
                      BPStudy #49
fibonacci.scala
def fibonacci(n:Int): Int =
  if (n == 0 || n == 1)
    {
       1
    }
  else
    {
       fibonacci(n-1) + fibonacci(n-2)
    }


                 BPStudy #49
The Zen of Python




      BPStudy #49
Beautiful is better than ugly.
●   Python に限った話じゃない




                 BPStudy #49
Explicit is better than implicit.
●   Implicit conversion とか Implicit parameter と
    かある
    ●   implicit def tostring(n:Int) = n.toString
    ●   def print(x:String) = println(x)
    ●   print(10)




                            BPStudy #49
Simple is better than complex.
●   Python は書いたまま読める(意味が取りやすい)
●   Scala はソースが短くて意味が取りやすいけど、す
    べてを把握するのが困難だったりする




                BPStudy #49
Flat is better than nested.
●   ネストした関数・部分関数・パターンマッチ結構書く
●   それが読みにくいというわけではない




                 BPStudy #49
Sparse is better than dense.
●   メソッドチェイン大好き
●   行あたりの持つ意味が結構濃い




                BPStudy #49
略




BPStudy #49
もしかして Pythonista には向かない?




         BPStudy #49
新しいパラダイム・作法・文化に触れられる




        BPStudy #49
開発環境




BPStudy #49
IDE
●   Eclipse
    ●   プラグインがある
●   IntelliJ IDEA
    ●   結構いいらしい




                    BPStudy #49
Emacs
●   scala-mode.el
    ●   Syntax Highlight と入力補助
    ●   よくあるメジャーモード
●   Ensime かわいいよ Ensime
    ●   補完とかできるらしい
    ●   裏に Scala のプロセスを立ててコンパイルしている
    ●   すみませんつかってません
    ●   EmacsでつくるScala開発環境 後編(ENSIME) -
        tototoshiの日記
    ●   http://d.hatena.ne.jp/tototoshi/20100927/12855959
                         BPStudy #49
ビルドツール
●   ant
●   maven
●   sbt (simple build tool)
    ●   あんまり simple じゃないような…?
    ●   buildout みたいなことできる
    ●   オススメ




                       BPStudy #49
まとめ
●   Python とは違った文化・毛色の言語
    ●   動的型・静的型
    ●   インタプリタ型・コンパイル型
    ●   Explicit・Implicit




                    BPStudy #49
本とか




BPStudy #49
Scala スケーラブルプログラミング
●   通称コップ本
●   Odersky 先生が書いた本
●   仕様とか詳しい
    ●   K&R・プログラミング言語C++
●   第一版は2.7 なのでちょっと古い
●   第二版出たばっか
    ●   2.8, 2.9 対応


                      BPStudy #49
プログラミング Scala
●   信頼の O'reilly
●   すみませんまだよんでません




                   BPStudy #49
Scala 実践プログラミング
●   すみませんまだよんでません
●   後半がマニアックらしいです
●   今日サインもらえますきっと




             BPStudy #49
勉強会とか
●   Scala 勉強会 in 渋谷
    ●   隔週水曜日に渋谷で開催される勉強会
    ●   とってもゆる〜い
    ●   気軽に参加できる
    ●   http://scala-users.org/shibuya/
●   Scala 勉強会 in 秋葉原
    ●   隔週水曜日に秋葉原で開催される勉強会
    ●   とってもゆる〜い
    ●   気軽に参加できる
    ●   http://scala-users.org/shibuya/
●   ゆるふわ Scala 勉強会
                            BPStudy #49
横浜.py
●   はまぱい? よこぱい?
●   Facebook Group
    ●   https://www.facebook.com/groups/126168334149
●   初心者向けな会にしたいなあ




                       BPStudy #49
ご清聴ありがとうございました!




     BPStudy #49

Weitere ähnliche Inhalte

Was ist angesagt?

私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46civicpg
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTTetsuya Morimoto
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境Hisao Soyama
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonkuroneko1988
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話Hisateru Tanaka
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01Takeshi Akutsu
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1shiroyagi
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appenginea know
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyShinichi Okada
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3Atsushi Odagiri
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールTano Makoto
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Takuya Ueda
 

Was ist angesagt? (20)

私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LT
 
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
 
Sinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPythonSinatra風マイクロフレームワークで始めるPython
Sinatra風マイクロフレームワークで始めるPython
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
 
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
 
Py datameetup1
Py datameetup1Py datameetup1
Py datameetup1
 
210630 python
210630 python210630 python
210630 python
 
Go言語オーバービュー201507
Go言語オーバービュー201507Go言語オーバービュー201507
Go言語オーバービュー201507
 
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 
OSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツールOSSで楽に作るGo言語クライアントツール
OSSで楽に作るGo言語クライアントツール
 
Goとテスト
GoとテストGoとテスト
Goとテスト
 
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
 

Andere mochten auch

Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみたYoichi Toyota
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてMitsutoshi Aoe
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介Daniel Perez
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみたTakashi Nishisaki
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?pocketberserker
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪Naoki Kitora
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateepocketberserker
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Cryptotrmr
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門Yasuaki Takebe
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
120901fp key
120901fp key120901fp key
120901fp keyksknac
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutinemelpon
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)tadaaki hayashi
 
最速の言語Lua ~Python Hack-a-thon #3~
最速の言語Lua ~Python Hack-a-thon #3~最速の言語Lua ~Python Hack-a-thon #3~
最速の言語Lua ~Python Hack-a-thon #3~Yuki Tamura
 
データベース入門3
データベース入門3データベース入門3
データベース入門3tadaaki hayashi
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 

Andere mochten auch (20)

Erlang
ErlangErlang
Erlang
 
Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみた
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
 
Yesod(at FPM2012)
Yesod(at FPM2012)Yesod(at FPM2012)
Yesod(at FPM2012)
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
120901fp key
120901fp key120901fp key
120901fp key
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
 
最速の言語Lua ~Python Hack-a-thon #3~
最速の言語Lua ~Python Hack-a-thon #3~最速の言語Lua ~Python Hack-a-thon #3~
最速の言語Lua ~Python Hack-a-thon #3~
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 

Ähnlich wie Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Hiro Yoshioka
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOPazuma satoshi
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッションShohei Hido
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」Takayuki Fukumoto
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017Motohiro Ueki
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方信之 岩永
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 

Ähnlich wie Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 (20)

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017クイズ・Python勝ち抜きバトル pycon jp_2017
クイズ・Python勝ち抜きバトル pycon jp_2017
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
C#言語機能の作り方
C#言語機能の作り方C#言語機能の作り方
C#言語機能の作り方
 
Python勉強会 2015-12-02
Python勉強会 2015-12-02Python勉強会 2015-12-02
Python勉強会 2015-12-02
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 

Kürzlich hochgeladen

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
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
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
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
 
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
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Kürzlich hochgeladen (8)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
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
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
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
 
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
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

Pythonista による Pythonista のための Scala 紹介 in BPStudy #49

  • 1. Pythonista による Pythonista のための Scala 紹介 2011/09/30 BPStudy #49 Scala 祭り しょうま @shomah4a Id:shomah4a BPStudy #49
  • 2. 内容 ● 自己紹介 ● Scala ってどんな言語? ● どこで使われている? ● 動的型付け・静的型付け ● 型推論 ● 関数型なにそれおいしいの? ● Python と Scala ● 開発環境について ● その他 BPStudy #49
  • 3. お前、誰よ ● しょうま(@shomah4a) ● 今月頭から Java の会社 ● 仕事では今は Python 使ってます。と思ったらそうでもなくなった ● Java とかよくわかりません ● Scala を始めたきっかけは面白そうだったから ● Android 開発で Java 使いたくないってのも ● 言語遍歴 ● Basic -> VB -> (C ->) C++ -> Python(, Haskell, Erlang, OCaml, Scheme) -> Scala ● Python 界隈の人 BPStudy #49
  • 5. Scala とは ● Scala ... はオブジェクト指向言語と関数型言語の 特徴を統合したマルチパラダイムのプログラミング 言語である。(wikipedia) ● 最新版は 2.9.1 ● 静的型付けなコンパイル型言語 ● コンパイル遅い… ● 省コード ● Java とか冗長でめんどくs(ry BPStudy #49
  • 6. Scala とは ● 標準ライブラリ ● collection ● JSON ● Stream ● Web Framework ● Lift, Play, BlueEyes, ... その他諸々 BPStudy #49
  • 7. Scala とは ● JVM で動く ● Android の Dalvik VM でも動くよ! ● Java のライブラリをそのまま使える – でも… ● .NET CLR もサポートしているらしいけど開発止まってる… ● LL です! ● REPL もあるよ! ● LL Tiger にもいたよ! BPStudy #49
  • 8. Scala とは ● 並行処理 ● Actor モデル – Erlang の Process – Message Passing でデータをやり取りし、共有メモリを排する – Python の multiprocessing が似たようなインタフェイス ● STM (Software Transaction Memory) – 共有メモリに対するアクセス制御の方法 – Haskell とか Clojure とか – PyPy でも GIL を取り除くために注目されたり ● このあたりは @cooldaemon さんが詳しい ● http://d.hatena.ne.jp/cooldaemon/ BPStudy #49
  • 9. どんなところで使われている? ● 大体 Web 系 ● Twitter, Foursquare, Remember the Milk, etc... ● 国内だと GMO メディア, ドワンゴ[要出典]など ● Android ● 個人的に一個作りました BPStudy #49
  • 10. マスコットキャラクタ ● @scalachan BPStudy #49
  • 11. Java と Scala BPStudy #49
  • 12. Java と Scala ● よく言われる「JVM で動くから Java の遺産資産使 えるよね」という話 ● Java のライブラリを使うとその部分は Java っぽくなら ざるを得ない ● Scala っぽく書くために Wrapper はほしい ● Better Java としてしか Scala を使わないのはどう なの? ● C++ != Better C BPStudy #49
  • 14. 動的型付けとは ● 変数の型が実行時に決まる ● 実行時の変数の中身次第 ● 大抵インタプリタ型 ● メリット ● 文法チェックだけでコンパイルしないで実行できる ● ゆるふわ ● デメリット ● 動かしてみないと型の間違いがあってもエラーが出ない BPStudy #49
  • 15. 静的型付け ● 変数の型がコンパイル時に決まる ● 大抵コンパイル型の言語 ● メリット ● 型エラーは実行前に発見できる ● 動的型付けより堅牢 ● デメリット ● 型書かないといけない ● ゆるふわじゃない BPStudy #49
  • 18. 総称型 ● Generics ● クラス・関数に型パラメータを付与し、様々な型に対して 同じ処理を書けるようにする ● Java からある ● C++ のテンプレートのつもりで使うとハマる – テンプレートと違って単純置換じゃない ● def add[T](left:T, right:T) = {...} BPStudy #49
  • 19. 型とか ● Python ● Scala ● Duck Typing ● Structural Subtyping ● 実行時に動的に属性を ● 特定の属性を持つとい 見る う型を定義可能 ● メソッド・属性の有無に ● http://d.hatena.ne.jp/yu 関係なく動的に解決す ● 皿うどん るので実行時にエラー が出る可能性 ● OCaml からパクッた BPStudy #49
  • 20. 型推論 ● 変数定義時や関数定義時に、文脈から型を推測し て変数や関数の型を決める仕組み ● val x = 10 と書いてあれば x が Int であると推論する ● Java なんかだと int x とか書かないといけない。 ● SomeClass x = new SomeClass(...) – SomeClass が二回出るのって無駄じゃね? ● val x = new SomeClass(...) – すっきり – 変更するときに書き換える箇所が少ない BPStudy #49
  • 21. 関数型 ● 関数型言語は、広い意味ではファーストクラスの関 数オブジェクトを持つ言語である。また、純粋関数型 言語では、全ての関数が副作用を持たない。関数 型言語の多くは、カリー化、遅延評価などの機能を 備えている。また、静的型付けの物の多くは型推論 の機能を持つ。(wikipedia) ● 広い意味では Python も関数型の特徴がある ● 関数オブジェクト ● 高階関数(map, filter, reduce) ● デコレータ(関数を受け取って関数を返す高階関数) BPStudy #49
  • 22. Scala の関数型 ● ファーストクラスの関数オブジェクト ● 無名関数 ● カリー化 ● 遅延評価 ● パターンマッチ ● case class で拡張できる ● 末尾再帰最適化 ● 相互末尾再帰は未サポート BPStudy #49
  • 23. それ以外 ● 限定継続 ● Scalaの限定継続の基本と応用in高橋メソッド ● by @kmizu ● http://www.slideshare.net/kmizushima/scala-83454 ● コンパイラプラグイン ● モテモテコンパイラプラグイン by @kiris ● http://www.slideshare.net/kiris60/motemote-compil BPStudy #49
  • 24. Python と Scala BPStudy #49
  • 26. 例: 1〜100 をプリントする ● Scala ● 0 to 100 foreach {x=> println(x)} ● 0.to(100).foreach(println) ● Python ● for i in xrange(101): print i ● for i in range(101): print(i) ● Ruby ● 0.upto(100).each {|i| puts(i)} BPStudy #49
  • 28. fizzbuzz.scala 0 to 100 foreach (i =>{ if (i % 3 == 0) { print("fizz") } if (i % 5 == 0) { print("buzz") } if (i % 5 != 0 && i % 3 != 0) { print(i) } println("") }) BPStudy #49
  • 29. fibonacci.scala def fibonacci(n:Int): Int = if (n == 0 || n == 1) { 1 } else { fibonacci(n-1) + fibonacci(n-2) } BPStudy #49
  • 30. The Zen of Python BPStudy #49
  • 31. Beautiful is better than ugly. ● Python に限った話じゃない BPStudy #49
  • 32. Explicit is better than implicit. ● Implicit conversion とか Implicit parameter と かある ● implicit def tostring(n:Int) = n.toString ● def print(x:String) = println(x) ● print(10) BPStudy #49
  • 33. Simple is better than complex. ● Python は書いたまま読める(意味が取りやすい) ● Scala はソースが短くて意味が取りやすいけど、す べてを把握するのが困難だったりする BPStudy #49
  • 34. Flat is better than nested. ● ネストした関数・部分関数・パターンマッチ結構書く ● それが読みにくいというわけではない BPStudy #49
  • 35. Sparse is better than dense. ● メソッドチェイン大好き ● 行あたりの持つ意味が結構濃い BPStudy #49
  • 40. IDE ● Eclipse ● プラグインがある ● IntelliJ IDEA ● 結構いいらしい BPStudy #49
  • 41. Emacs ● scala-mode.el ● Syntax Highlight と入力補助 ● よくあるメジャーモード ● Ensime かわいいよ Ensime ● 補完とかできるらしい ● 裏に Scala のプロセスを立ててコンパイルしている ● すみませんつかってません ● EmacsでつくるScala開発環境 後編(ENSIME) - tototoshiの日記 ● http://d.hatena.ne.jp/tototoshi/20100927/12855959 BPStudy #49
  • 42. ビルドツール ● ant ● maven ● sbt (simple build tool) ● あんまり simple じゃないような…? ● buildout みたいなことできる ● オススメ BPStudy #49
  • 43. まとめ ● Python とは違った文化・毛色の言語 ● 動的型・静的型 ● インタプリタ型・コンパイル型 ● Explicit・Implicit BPStudy #49
  • 45. Scala スケーラブルプログラミング ● 通称コップ本 ● Odersky 先生が書いた本 ● 仕様とか詳しい ● K&R・プログラミング言語C++ ● 第一版は2.7 なのでちょっと古い ● 第二版出たばっか ● 2.8, 2.9 対応 BPStudy #49
  • 46. プログラミング Scala ● 信頼の O'reilly ● すみませんまだよんでません BPStudy #49
  • 47. Scala 実践プログラミング ● すみませんまだよんでません ● 後半がマニアックらしいです ● 今日サインもらえますきっと BPStudy #49
  • 48. 勉強会とか ● Scala 勉強会 in 渋谷 ● 隔週水曜日に渋谷で開催される勉強会 ● とってもゆる〜い ● 気軽に参加できる ● http://scala-users.org/shibuya/ ● Scala 勉強会 in 秋葉原 ● 隔週水曜日に秋葉原で開催される勉強会 ● とってもゆる〜い ● 気軽に参加できる ● http://scala-users.org/shibuya/ ● ゆるふわ Scala 勉強会 BPStudy #49
  • 49. 横浜.py ● はまぱい? よこぱい? ● Facebook Group ● https://www.facebook.com/groups/126168334149 ● 初心者向けな会にしたいなあ BPStudy #49