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

Overview of Scala ~ Hacker Tackle

Apr 12, 2017

Download

Technology

Daisuke Kasuya
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Overview of Scala ~ Hacker Tackle

Overview of Scala ~Scalaひとめぐり~

2015年9月26日Hacker Tackle

id:daiksy

Page 2: Overview of Scala ~ Hacker Tackle

本日の内容

• Scalaの周辺状況

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

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

• Scalaの特徴

Page 3: Overview of Scala ~ Hacker Tackle

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

Page 4: Overview of Scala ~ Hacker Tackle
Page 5: Overview of Scala ~ Hacker Tackle
Page 6: Overview of Scala ~ Hacker Tackle
Page 7: Overview of Scala ~ Hacker Tackle

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

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

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

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

Page 8: Overview of Scala ~ Hacker Tackle

daiksyのScala歴

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

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

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

Page 9: Overview of Scala ~ Hacker Tackle

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

• 2014年 ScalaMatsuri 2014

• 2015年 Scala関西Summit

Page 10: Overview of Scala ~ Hacker Tackle
Page 11: Overview of Scala ~ Hacker Tackle

採用事例 (海外)

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

(ScalaMatsuri2014にて)

• Linkedin

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

Page 12: Overview of Scala ~ Hacker Tackle

採用事例 (国内)

• ドワンゴ

• サイバーエージェント

• スマートニュース

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

• LINE

• ヌーラボ

• はてな

Page 13: Overview of Scala ~ Hacker Tackle

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

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

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

Page 14: Overview of Scala ~ Hacker Tackle

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

• Lift

• Play Framework

• Scalatra

• Skinny Framework

Page 15: Overview of Scala ~ Hacker Tackle

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

今年からScalaコースを新設

Page 16: Overview of Scala ~ Hacker Tackle

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

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

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

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

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

Page 17: Overview of Scala ~ Hacker Tackle

Scalaの特徴

• JVM上で動作

• 静的な型付けと型推論

• オブジェクト指向

• 関数プログラミング

Page 18: Overview of Scala ~ Hacker Tackle

静的な型付けと型推論

Page 19: Overview of Scala ~ Hacker Tackle

静的な型付けと型推論

Page 20: Overview of Scala ~ Hacker Tackle

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

Page 21: Overview of Scala ~ Hacker Tackle

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

• trait を使って実現

• trait は複数mixinできる

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

Page 22: Overview of Scala ~ Hacker Tackle

関数プログラミング

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

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

Page 23: Overview of Scala ~ Hacker Tackle

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

Page 24: Overview of Scala ~ Hacker Tackle

副作用とは

• 変数の値を変更する

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

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

Page 25: Overview of Scala ~ Hacker Tackle

副作用のない宣言(immutable)

Page 26: Overview of Scala ~ Hacker Tackle

副作用のない宣言(immutable)

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

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

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

とimmutableを使い分けられる

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

Page 27: Overview of Scala ~ Hacker Tackle

if 式

Page 28: Overview of Scala ~ Hacker Tackle

if 式

Page 29: Overview of Scala ~ Hacker Tackle

for 式

Page 30: Overview of Scala ~ Hacker Tackle

コレクション

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

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

Page 31: Overview of Scala ~ Hacker Tackle

FizzBazzを実装してみよう

Page 32: Overview of Scala ~ Hacker Tackle

副作用のない実装まとめ

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

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

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

Page 33: Overview of Scala ~ Hacker Tackle

Scalaではnullも使わない

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

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

Page 34: Overview of Scala ~ Hacker Tackle

Option型

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

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

Page 35: Overview of Scala ~ Hacker Tackle

Option型

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

• 値がないときはNone

Page 36: Overview of Scala ~ Hacker Tackle

Option型

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

Page 37: Overview of Scala ~ Hacker Tackle

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

Page 38: Overview of Scala ~ Hacker Tackle

Option型

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

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

Page 39: Overview of Scala ~ Hacker Tackle

Option型同士の計算

Page 40: Overview of Scala ~ Hacker Tackle

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

• 強力なパターンマッチ

• 暗黙の変換 (implicit)

Page 41: Overview of Scala ~ Hacker Tackle

無限に勉強できる

Page 42: Overview of Scala ~ Hacker Tackle

Scalaは難しい?

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

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

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

Page 43: Overview of Scala ~ Hacker Tackle

Enjoy Scala!!

Page 44: Overview of Scala ~ Hacker Tackle

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