狠狠撸

狠狠撸Share a Scribd company logo
厂肠补濒补と过ごした5ヶ月间
Demand Side Science(株) 冈田遥来
もくじ
? 自己紹介
? Demand Side Science(株)について
? Scalaの学習
? Scalaと仲良くなるためにやったこと
$ whoami
? 冈田遥来
? Scalaエンジニア
? 2015/03~ Demand Side Science(株)
? 前職ではC#(Windowsアプリ), Railsなど
? 趣味でiPhoneアプリ
$ whoami
? ジャズトランペット
? 「カンタス村田とサンバマシーンズ」で?
FUJI ROCK’10 ROOKIE A GO-GO出場
DSSについて
? 2012/11 設立
? 社員10名
? 3PAS, アドベリ, DSPなど
DSSの開発環境
? すべてのプロダクトでScalaを使用
? Webアプリ(Play, Spray)
? 入札サーバ(Finagle)
? ログ集計など各種バッチ
DSSの開発環境
? IDE
? IntelliJ IDEA : 7名
? Eclipse(Scala IDE) : 2名
? Emacs + Ensime : 1名
_人人人人人_
>?Ensime?<
 ̄Y^Y^Y^Y ̄
Scala
? Martin Odersky教授により設計
? オブジェクト指向
? 関数型のエッセンス
? JVMで動く
? Javaのライブラリをシームレスに使える
Scala
? アドテク業界で採用例が多い印象
? Cyber Agent, Smart News, ?
Septeni, Fringe81, …
? 競合言語
? Java, Groovy, Ruby, …
Scalaの会社に入って
? Scala未経験からのスタート
? シンタックスシュガーが多く、一通り読める
ようになるのに苦労
例. Dispatchのコード
import dispatch._, Defaults._
val svc = url(“http://api.hostip.info/country.php")
val country = Http(svc OK as.String)
? HTTPクライアント
? http://dispatch.databinder.net/Dispatch.html
import dispatch._, Defaults._
val svc = url(“http://api.hostip.info/country.php")
val country = Http(svc OK as.String)
もやっとする
svcはReq型だが、ReqにOKメソッドはない
スペース区切りで3つキーワードが並んでいる?
どう結合してるのか一見わかりづらい
import dispatch._, Defaults._
val svc = url(“http://api.hostip.info/country.php")
val country = Http(svc OK as.String)
解説
RequestHandlerTupleBuilderにOKメソッ
ドが定義されている
as.Stringを引数としてOKメソッド呼び出し
? 引数が一つのメソッドは、ドットと括弧無しで呼びだせる(中置記法)
? ReqからRequestHandlerTupleBuilderへのimplicit conversionが行われている
Scalaの学習に使った資料
? Scala School!
? Ninety-Nine Scala Problems
Scala School!
? http://twitter.github.io/scala_school/
? http://seratch.hatenablog.jp/entry/
20120218/1329531294 (瀬良さんによる日本語訳)
? コンパクトにまとまっている
? 最低限のScalaの言語仕様を一通りおさえられる
Scala School!
Ninety-Nine Scala Problems
? http://aperiodic.net/phil/scala/s-99/
? 再帰の練習によい
Ninety-Nine Scala Problems
object P05 {
def reverse[A](lst: List[A]): List[A] = {
@tailrec
def reverseIter[A](l: List[A], result: List[A]): List[A] = l match {
case Nil => result
case head :: tail => reverseIter(tail, head :: result)
}
reverseIter(lst, Nil)
}
}
もっと厂肠补濒补と仲良くなる
ScalaにはREPLがある
? REPL(Read–eval–print loop)
? 対話的にコードを実行する環境
? Ruby(irb)とかPythonとかLISPにもある
scala> final val b = "b"
b: String("b") = b
scala> def foo(c: b.type) = c
foo: (c: String("b"))String
scala> foo("c")
<console>:10: error: type mismatch;
found : String("c")
required: String("b")
foo("c")
^
みんなでREPL
? 社内のチャットボットに?
ScalaのREPLを導入(弊社水谷)
よかったこと
? 「これうまい書き方ある?」みたいな議論が?
盛んになった
みんなでベンチ
? amemiyasanはベンチマークもとれる
? 業務中にベンチマークを競ったり
結果
? とくにコレクションの理解が進んだ
? 性能特性(List, Vector, Queue, …)
? 「推測するな、計測せよ」の文化が根付いた
あめみやさんデモ
まとめ
? Scalaは仲良くなると面白い
? 言語機能が多いので、色々覚えてくると組
み合わせる楽しみがある
? Scalaと(会社の人とも)仲良くなるには、みん
なでREPLおすすめです
ご清聴ありがとうございました
Demand Side Scienceは?
本物のScalaプログラマを募集しています?
?
recruit@demand-side-science.jp

More Related Content

厂肠补濒补と过ごした5ヶ月间