Anúncio

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

自宅警備保障
30 de Sep de 2011
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Anúncio

Similar a Pythonista による Pythonista のための Scala 紹介 in BPStudy #49(20)

Último(20)

Anúncio

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
  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.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
  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 ● 信頼の 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
  50. ご清聴ありがとうございました! BPStudy #49
Anúncio