Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 4,674 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,674
On Slideshare
4,631
From Embeds
43
Number of Embeds
4

Actions

Shares
Downloads
5
Comments
0
Likes
9

Embeds 43

http://paper.li 20
http://a0.twimg.com 9
http://a0.twimg.com 9
https://twitter.com 5

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 4. Scala とはなんぞや? 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
  • 13. 静的型付けと動的型付け BPStudy #49
  • 14. 動的型付けとは● 変数の型が実行時に決まる ● 実行時の変数の中身次第● 大抵インタプリタ型● メリット ● 文法チェックだけでコンパイルしないで実行できる ● ゆるふわ● デメリット ● 動かしてみないと型の間違いがあってもエラーが出ない BPStudy #49
  • 15. 静的型付け● 変数の型がコンパイル時に決まる ● 大抵コンパイル型の言語● メリット ● 型エラーは実行前に発見できる ● 動的型付けより堅牢● デメリット ● 型書かないといけない ● ゆるふわじゃない BPStudy #49
  • 16. でも、めんどくさいんでしょう? BPStudy #49
  • 17. Scala には型付けを楽にするための仕組みが沢山 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
  • 25. ソースを見てみる 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
  • 27. Ruby の方が似てね? BPStudy #49
  • 28. fizzbuzz.scala0 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.scaladef 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
  • 36. 略BPStudy #49
  • 37. もしかして Pythonista には向かない? BPStudy #49
  • 38. 新しいパラダイム・作法・文化に触れられる BPStudy #49
  • 39. 開発環境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
  • 44. 本とかBPStudy #49
  • 45. Scala スケーラブルプログラミング● 通称コップ本● Odersky 先生が書いた本● 仕様とか詳しい ● K&R・プログラミング言語C++● 第一版は2.7 なのでちょっと古い● 第二版出たばっか ● 2.8, 2.9 対応 BPStudy #49
  • 46. プログラミング Scala● 信頼の Oreilly● すみませんまだよんでません 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
  • 50. ご清聴ありがとうございました! BPStudy #49