Contenu connexe Similaire à Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 Similaire à Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 (20) Pythonista による Pythonista のための Scala 紹介 in BPStudy #492. 内容
● 自己紹介
● 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
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
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
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
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
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