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

  • 4,004 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,004
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
5
Comments
0
Likes
9

Embeds 0

No embeds

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