Your SlideShare is downloading. ×
0
Pythonista によるPythonista のための    Scala 紹介2011/09/30 BPStudy #49 Scala 祭り           しょうま        @shomah4a       Id:shomah4a...
内容●   自己紹介●   Scala ってどんな言語?●   どこで使われている?●   動的型付け・静的型付け●   型推論●   関数型なにそれおいしいの?●   Python と Scala●   開発環境について●   その他    ...
お前、誰よ●   しょうま(@shomah4a)●   今月頭から Java の会社    ●   仕事では今は Python 使ってます。と思ったらそうでもなくなった    ●   Java とかよくわかりません●   Scala を始めたき...
Scala とはなんぞや?    BPStudy #49
Scala とは●   Scala ... はオブジェクト指向言語と関数型言語の    特徴を統合したマルチパラダイムのプログラミング    言語である。(wikipedia)●   最新版は 2.9.1●   静的型付けなコンパイル型言語  ...
Scala とは●   標準ライブラリ    ●   collection    ●   JSON    ●   Stream●   Web Framework    ●   Lift, Play, BlueEyes, ... その他諸々   ...
Scala とは●   JVM で動く    ●   Android の Dalvik VM でも動くよ!    ●   Java のライブラリをそのまま使える        –   でも…●   .NET CLR もサポートしているらしいけど...
Scala とは●   並行処理    ●   Actor モデル        –   Erlang の Process        –   Message Passing でデータをやり取りし、共有メモリを排する        –   P...
どんなところで使われている?●   大体 Web 系    ●   Twitter, Foursquare, Remember the Milk, etc...●   国内だと GMO メディア, ドワンゴ[要出典]など●   Android ...
マスコットキャラクタ●   @scalachan                 BPStudy #49
Java と Scala   BPStudy #49
Java と Scala●   よく言われる「JVM で動くから Java の遺産資産使    えるよね」という話    ●   Java のライブラリを使うとその部分は Java っぽくなら        ざるを得ない    ●   Scal...
静的型付けと動的型付け    BPStudy #49
動的型付けとは●   変数の型が実行時に決まる    ●   実行時の変数の中身次第●   大抵インタプリタ型●   メリット    ●   文法チェックだけでコンパイルしないで実行できる    ●   ゆるふわ●   デメリット    ●  ...
静的型付け●   変数の型がコンパイル時に決まる    ●   大抵コンパイル型の言語●   メリット    ●   型エラーは実行前に発見できる    ●   動的型付けより堅牢●   デメリット    ●   型書かないといけない    ●...
でも、めんどくさいんでしょう?     BPStudy #49
Scala には型付けを楽にするための仕組みが沢山          BPStudy #49
総称型●   Generics    ●   クラス・関数に型パラメータを付与し、様々な型に対して        同じ処理を書けるようにする    ●   Java からある    ●   C++ のテンプレートのつもりで使うとハマる     ...
型とか●   Python               ●      Scala●   Duck Typing          ●      Structural Subtyping    ●   実行時に動的に属性を            ...
型推論●   変数定義時や関数定義時に、文脈から型を推測し    て変数や関数の型を決める仕組み    ●   val x = 10 と書いてあれば x が Int であると推論する    ●   Java なんかだと int x とか書かない...
関数型●   関数型言語は、広い意味ではファーストクラスの関    数オブジェクトを持つ言語である。また、純粋関数型    言語では、全ての関数が副作用を持たない。関数    型言語の多くは、カリー化、遅延評価などの機能を    備えている。ま...
Scala の関数型●   ファーストクラスの関数オブジェクト●   無名関数●   カリー化●   遅延評価●   パターンマッチ    ●   case class で拡張できる●   末尾再帰最適化    ●   相互末尾再帰は未サポート...
それ以外●   限定継続    ●   Scalaの限定継続の基本と応用in高橋メソッド    ●   by @kmizu    ●   http://www.slideshare.net/kmizushima/scala-83454●   コ...
Python と Scala    BPStudy #49
ソースを見てみる  BPStudy #49
例: 1〜100 をプリントする●   Scala    ●   0 to 100 foreach {x=> println(x)}    ●   0.to(100).foreach(println)●   Python    ●   for ...
Ruby の方が似てね?    BPStudy #49
fizzbuzz.scala0 to 100 foreach (i =>{   if (i % 3 == 0)     {       print("fizz")     }   if (i % 5 == 0)     {       prin...
fibonacci.scaladef fibonacci(n:Int): Int =  if (n == 0 || n == 1)    {       1    }  else    {       fibonacci(n-1) + fibo...
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...
Simple is better than complex.●   Python は書いたまま読める(意味が取りやすい)●   Scala はソースが短くて意味が取りやすいけど、す    べてを把握するのが困難だったりする           ...
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    ●   補完とかできるらしい    ●   裏に...
ビルドツール●   ant●   maven●   sbt (simple build tool)    ●   あんまり simple じゃないような…?    ●   buildout みたいなことできる    ●   オススメ      ...
まとめ●   Python とは違った文化・毛色の言語    ●   動的型・静的型    ●   インタプリタ型・コンパイル型    ●   Explicit・Implicit                    BPStudy #49
本とかBPStudy #49
Scala スケーラブルプログラミング●   通称コップ本●   Odersky 先生が書いた本●   仕様とか詳しい    ●   K&R・プログラミング言語C++●   第一版は2.7 なのでちょっと古い●   第二版出たばっか    ● ...
プログラミング Scala●   信頼の Oreilly●   すみませんまだよんでません                   BPStudy #49
Scala 実践プログラミング●   すみませんまだよんでません●   後半がマニアックらしいです●   今日サインもらえますきっと             BPStudy #49
勉強会とか●   Scala 勉強会 in 渋谷    ●   隔週水曜日に渋谷で開催される勉強会    ●   とってもゆる〜い    ●   気軽に参加できる    ●   http://scala-users.org/shibuya/● ...
横浜.py●   はまぱい? よこぱい?●   Facebook Group    ●   https://www.facebook.com/groups/126168334149●   初心者向けな会にしたいなあ               ...
ご清聴ありがとうございました!     BPStudy #49
Upcoming SlideShare
Loading in...5
×

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

4,375

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,375
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×