44
Overview of Scala ~Scalaひとめぐり~ 2015926Hacker Tackle id:daiksy

Overview of Scala ~ Hacker Tackle

Embed Size (px)

Citation preview

Overview of Scala ~Scalaひとめぐり~

2015年9月26日Hacker Tackle

id:daiksy

本日の内容

• Scalaの周辺状況

• 採用事例(海外・国内)

• はてなインターンの様子

• Scalaの特徴

粕谷 大輔 id:daiksy (@daiksy) 株式会社 はてな

• スイス連邦工科大学 (EPFL)のMartin

Odersky(小田好)教授によって設計

• JVMで動作(古の時代は .net Frameworkでも動いた)

• オブジェクト指向と関数型言語のパラダイム

daiksyのScala歴

• 2011年 くらいからちょっと触りだす

• 2012年 ~ 2014年 フリュー株式会社

• 2015年 ~ 現在 株式会社 はてな

日本でも規模の大きな カンファレンス• 2013年 Scala Conference in Japan

• 2014年 ScalaMatsuri 2014

• 2015年 Scala関西Summit

採用事例 (海外)

• Twitter 「Scalaで日本のバルスに耐えた」

(ScalaMatsuri2014にて)

• Linkedin

• Netflix (はてな京都でミートアップ開催)

採用事例 (国内)

• ドワンゴ

• サイバーエージェント

• スマートニュース

• TIS (Typesafeとパートナー契約)

• LINE

• ヌーラボ

• はてな

Scala != Better Java LLからの移行事例が増加

• チャットワーク PHP -> Scala

• はてなブックマーク Perl -> Scala

利用できる主なフレームワーク

• Lift

• Play Framework

• Scalatra

• Skinny Framework

はてなサマーインターン 2015

今年からScalaコースを新設

はてなサマーインターン Scalaコースのカリキュラム• 1日目 Scalaの言語基礎 & 課題(講師 id:daiksy)

• 2日目 DB講義 & 課題(講師 id:mechairoi)

• 3日目 HTTP, WAF講義 & 課題(講師 id:Songmu)

• 最後の3週間 Mackerelチームでプロダクト開発

他にもJavaScriptやインフラの講義も

Scalaの特徴

• JVM上で動作

• 静的な型付けと型推論

• オブジェクト指向

• 関数プログラミング

静的な型付けと型推論

静的な型付けと型推論

多態性 (オブジェクト指向)

多態性 (オブジェクト指向)

• trait を使って実現

• trait は複数mixinできる

• trait に実装することもできる

関数プログラミング

• 関数が第一級オブジェクト

• 副作用を伴わない実装のための機能 • if 式 • for 式 • 抱負なコレクションメソッド

関数が第一級オブジェクト

副作用とは

• 変数の値を変更する

• オブジェクトのフィールドを変更する(JavaのsetterとかC# のプロパティとか)

• ファイルやデータベースなどに対する入出力

副作用のない宣言(immutable)

副作用のない宣言(immutable)

• var で宣言すると再代入できる

• val で宣言すると再代入できない

• Scalaはコードスタイルや状況に応じてmutable

とimmutableを使い分けられる

• いわゆる「非純粋関数型言語」

if 式

if 式

for 式

コレクション

• List/Array/Map/Set いろいろある

• コレクションには便利なメソッドが山程ある • map/filter/flatMap/find/findAll/reduce • take/drop/exists/sort/sortBy/zip/partition • grouped/groupBy

FizzBazzを実装してみよう

副作用のない実装まとめ

• val で宣言することで変数が再代入できなくなる

• if式 for式 コレクション操作 などを駆使すると、val だけでプログラミングできるようになる

• 慣れるとvar を使わざるを得ない局面で悔しみを感じる

Scalaではnullも使わない

• 言語仕様的にはnullは存在する

• Scalaではnullを使わずOption型を使う

Option型

• あるかないかわからない値を表現できる型

• Someの中身を使うには明示的に取り出す操作が必要 (ぬるぽに悩まずにすむ)

Option型

• 値があるときはSomeでくるむ

• 値がないときはNone

Option型

• Optionは型なので、そのまま使おうとするとコンパイルで怒られる

Option型のいろいろな 取り出し方

Option型

• 要素が0または1のコレクションとみなせる

• flatMap, foreachなどのコレクションのメソッドを持っている

Option型同士の計算

今日ご紹介しきれない いろいろな機能• case class

• 強力なパターンマッチ

• 暗黙の変換 (implicit)

無限に勉強できる

Scalaは難しい?

• 言語仕様が多いので学習コストは低くない

• 表現力が抱負なので、Better Javaとして書いてもよい (最初はvar使ってもいいのでは)

• 関数プログラミングが難しい? -> 新しいパラダイムの学習は難しい。オブジェクト指向もそれは一緒

Enjoy Scala!!

ご清聴ありがとうございました